如何将函数指针作为模板参数传递

时间:2011-12-14 08:57:49

标签: c++ templates function parameters

第二行汇编得很好,但第三行给了我一个错误

int (* const f)() = ff;
cout << typeid(replace<int (*)(), int, char>::type).name() << endl;
cout << typeid(replace<f, int, char>::type).name() << endl;

test.cpp:3:25: error: the value of ‘f’ is not usable in a constant expression 
test.cpp:1:15: note: ‘f’ was not declared ‘constexpr’
test.cpp:3:37: error: template argument 1 is invalid

2 个答案:

答案 0 :(得分:3)

仅当参数是非类型参数时,模板参数才可以是函数指针。但遗憾的是,C ++ 11甚至还没有允许使用各种常量表达式来计算模板参数。对于非类型指针或引用,只允许传递另一个模板参数的值或直接获取的函数或对象的地址,而不将其首先存储在const / constexpr变量中

对于下一次C ++修订,很可能会解除此限制。

答案 1 :(得分:0)

您可以使用模板化界面而不是函数指针:

template<class T>
class IMyInterface{
public:
 virtual void doSomething(const T& arg) =0;
};