我有一个模板,要求我将仿函数作为类型参数传递给它,以便执行一些计算。我想根据我想用来实际执行计算的另一个函数来专门化这个函子。基本上,我想这样做(这是不合法的,我正在重新定义函子):
template<typename T, int (*func)(int)>
struct Functor
{
T val;
int operator()(int x) { return func(2); }
};
template<typename T, int (*func)(int, int)>
struct Functor
{
T val;
int operator()(int y) { return func(y, 2); }
};
Component<Functor<calculationFunction1>> comp1;
Component<Functor<calculationFunction2>> comp2;
auto result1 = comp1.Compute();
auto result2 = comp2.Compute();
我尝试过使用部分专业化来使其也能正常工作,但这似乎也不合法。我不确定是否有可能得到我想要的,因为这两个函数有不同的签名。实现我在这里尝试做的最好方法是什么?