模板中使用Boost Multi Index容器出现编译错误的解决方法
解决boost::multi_index_container模板类中的编译错误
你遇到的这个错误是典型的模板依赖名称歧义问题,咱们一步步来解决它:
问题原因
在模板类anrQueue内部,mQueue的类型a_queue是依赖于模板参数ValueType的类型(因为a_queue是基于ValueType定义的)。当你调用mQueue.get<1>()时,编译器无法确定get是一个模板成员函数,它会误以为<是小于运算符,从而抛出"expected primary-expression before ‘)’ token"的错误。
修复方案
只需要在get前面加上template关键字,明确告诉编译器这是一个模板成员函数调用:
template < class ValueType > class anrQueue { private: typedef boost::multi_index_container< ValueType, indexed_by< sequenced<> , ordered_unique<identity<ValueType> > > > a_queue; a_queue mQueue; public: size_t remove(const ValueType& x) { // 加上template关键字消除歧义 return mQueue.template get<1>().erase(x); } };
补充说明
在C++的模板规则里,当你访问一个依赖于模板参数的类型的模板成员时,必须使用template关键字来显式声明,否则编译器会解析失败。这个规则是为了避免编译器把模板参数的<和小于运算符混淆。
内容的提问来源于stack exchange,提问作者Vinod Shelke
相关产品推荐
相关产品推荐

