我正在一些大型库中添加新模块。这里的所有方法都是静态实现的。让我简单描述一下简化模型:
typedef std::vector<double> TData;
double test ( const TData &arg ) { return arg ( 0 ) * sin ( arg ( 1 ) + ...;}
double ( * p_test ) ( const TData> &arg) = &test;
class A
{
public:
static T f1 (TData &input) {
.... //some computations
B::f2 (p_test);
}
};
在内部f1()
执行一些计算并B::f2
调用静态方法。该f2
方法由另一位作者实现,代表了一些模拟算法(这里的例子是简化的)。
class B
{
public:
static double f2 (double ( * p_test ) ( const TData &arg ) )
{
//difficult algorithm working p_test many times
double res = p_test(arg);
}
};
该f2
方法有一个指向某个权重函数的指针(这里p_test
)。但在我的情况下,需要f1
为test()
方法计算的一些额外参数
double test ( const TData &arg, const TData &arg2, char *arg3.... ) { }
如何将这些参数注入test()
(等等f2
)以避免更改f2
方法的源代码(这不是微不足道的),重新设计库并且没有肮脏的黑客:-)?
最简单的步骤是覆盖f2
static double f2 (double ( * p_test ) ( const TData &arg ), const TData &arg2, char *arg3.... )
但是以后怎么办?考虑一下,方法是静态的,所以对象会有问题。
更新的问题
是否可以根据某些模板参数创建指向函数的指针或执行类似的操作
if (condition) res = p_test(arg);
else res = p_test2(arg, arg2, arg3);