如何最好地让用户重新定义类方法?

除了一个类A外,我有一个具有完全通用实现的库。此类仅具有单个功能int format(int i){},但不能按原样使用:format取决于每个不同的应用程序,需要用户定义。特别是,format有很多if-then语句,需要针对应用程序的环境正确设置。但是,该库的其余部分是完全通用的,并且可以在特定规格内的任何format选择中使用。

问题:让我的图书馆用户定义format工作方式的最佳方法是什么?这需要在代码级别上完成(而不是仅使用配置文件)。

一个明显的想法是让用户直接在源代码上直接重写format的定义,但这听起来并不是最优雅的方法。

另一个想法是使用继承:让用户定义一个从userA继承的A类,然后隐藏format函数。但是该库的其余部分使用类A而不是userA。此时,可以将A的所有实例替换为类型名desiredA,然后让用户将该类型名定义为userA。这也不是很优雅。

一定有更好的方法来做到这一点?

yangyaolei 回答:如何最好地让用户重新定义类方法?

这是我过去使用的一种方法。

  1. 添加了使用户能够注册自己选择的功能的功能。
  2. 如果已注册用户定义的功能,请调用它。否则,请使用一些默认功能。
using UserFunctionType = int(*)(int i);
UserFunctionType registeredFunction = nullptr;
void registerUserFunction(UserFunctionType f) { registeredFunction = f; }

int format(int i)
{
   if ( registeredFunction ) 
   {
      return registeredFunction(i);
   }
   else
   {
      // Some default implementation
   }
}

用户代码应类似于:

int myFunction(int i)
{
   // Return whatever makes sense.
}

int my_init()
{
   registerUserFunction(myFunction);
   return 0;
}

// Make sure my_init() gets called at program startup time.
static int dummy = my_init();
本文链接:https://www.f2er.com/3133785.html

大家都在问