尝试使用模板,其中参数为
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'的模板参数无效,预期的编译时常量表达式
我需要做什么才能编译?
答案 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));