C++ 模板化成员函数以增强多索引容器

C++ 模板化成员函数以增强多索引容器,c++,boost,templates,member-function-pointers,C++,Boost,Templates,Member Function Pointers,因此,我有一个boost多索引容器 using namespace boost::multi_index; template < typename O > class Container { public: multi_index_container< O, indexed_by< ordered_unique< const_mem_fun< O, std::str

因此,我有一个boost多索引容器

using namespace boost::multi_index;
template < typename O >
class Container
{
public:
    multi_index_container<
        O,
        indexed_by<
            ordered_unique<
                const_mem_fun< O, std::string, &O::name >
            >
        >
    > _container;
};
在划线处


嗯。原来这是我的错,因为我输入了一个签名错误的“&Object::name”参数。。。我已修复此问题。

更改类定义

template < typename O, typename KT, KT (O::* KM)() >
class Container 
//...
模板
类容器
//...

并使用
KM
代替
&KM

Alexey。这几乎奏效了。。我现在得到了一个不同的错误。我已经用你的例子编辑了我的帖子来说明这个错误。。我本不该怀疑你的。。我收到的编译器错误是由于容器中使用的对象有错误的签名……您可能会考虑为模板参数找到一个名称,这有点难以与数字文字混淆。嗨,戴维,我同意。我只是选择这些论点作为例子。
using namespace boost::multi_index;
template < typename O, typename KT, KT (O::* KM)() >
class Container
{
public:
    multi_index_container<
        O,
        indexed_by<
            ordered_unique<
                const_mem_fun< O, KT, KM >
            >
        >
    > _container;
};

int main( int c, char *v[] )
{
    Container< Object, std::string, &Object::name > container;  // <<---- ERROR HERE
}
Template parameter KM requires an expression of type std::string (Object::*)().
template < typename O, typename KT, KT (O::* KM)() >
class Container 
//...