使用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++ 无效初始化错误