使用Boost传递类函数的模板错误无效

时间:2011-04-28 21:10:33

标签: c++ templates boost

尝试使用模板,其中参数为

template<class T, boost::function<long (T*)> &f>
static long myFunc(const vector<boost::shared_ptr<T>>   &inputVector)   
{ // do stuff}

这是我的电话

long i = myFunc<MyClass, boost::bind(&MyClass::myClassFunc, _1)>(myInputVector);

其中函数的签名是

long myClassFunc() const { return m_value; }

获取以下编译器错误:

错误C2975:'f':'myFunc'的模板参数无效,预期的编译时常量表达式

我需要做什么才能编译?

1 个答案:

答案 0 :(得分:2)

将参数绑定到函数是一个运行时操作。将值作为模板参数传递时,必须在编译时知道该值。将boost :: function作为参数传递。

template<class T>
static long myFunc(const vector<boost::shared_ptr<T>> &inputVector, boost::function<long (T*)> &f)   
{ // do stuff 
}

这样称呼:

long i = myFunc<MyClass)>(myInputVector, boost::bind(&MyClass::myClassFunc, _1));