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

Posted

技术标签:

【中文标题】使用Boost传递类函数的无效模板错误【英文标题】:Invalid Template Error passing class function using Boost 【发布时间】:2011-04-28 21:10:32 【问题描述】:

尝试使用参数所在的模板

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”的模板参数无效,预期的编译时常量表达式

编译需要什么?

【问题讨论】:

你到底想做什么?您既没有传递 MyClass 的任何实例,也没有 myClassFunc 将 T* 作为参数,无论模板参数有什么问题,这段代码都没有任何意义。 【参考方案1】:

将参数绑定到函数是运行时操作。当您将值作为模板参数传递时,必须在编译时知道该值。将 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));

【讨论】:

以上是关于使用Boost传递类函数的无效模板错误的主要内容,如果未能解决你的问题,请参考以下文章

使用boost bind时无效使用非静态成员函数 - c ++

Boost statechart - 使用状态图作为模板参数时的编译错误

在 boost 中序列化二进制数据失败并出现“无效签名”错误

std::atomic 作为类成员:使用 boost/python.hpp 时使用已删除的函数错误

将派生类型的对象从 python 传递到 C++ 函数时会出现 Boost Python 运行时错误,该函数期望将 shared_ptr 传递给基类型

使用 boost::algorithm:string:split 和 std::string 的 g++ 无效初始化错误