引用模板中成员的成员

时间:2010-07-26 21:39:20

标签: c++ templates

我正在使用boost::multi_index_container而我正在尝试在模板参数中引用成员的成员,但目前还不清楚如何执行此操作:

struct Foo {
    int unique_value;
};

struct Bar {
    Foo foo;
    double non_unique_value;
};

// I want to refer to some_value in a template argument:
multi_index_container<Bar, boost::multi_index::indexed_by<
    ordered_unique< member< Foo, int, &Bar::foo::unique_value > >, // this doesn't work
    ordered_non_unique< member< Bar, double, &Bar::non_unique_value > > // this works
> >

如何在模板参数中引用unique_value?我理解为什么我所做的不起作用:我应该传达FooBar成员的类型并且正在做更类似Bar::Foo::some_value的事情,但目前还不清楚我如何指定这一点。

3 个答案:

答案 0 :(得分:2)

有关此功能的问题会不时弹出,因为它确实是一个非常合乎逻辑的事情。但不幸的是,它不是语言的一部分。

同时查看此主题Is Pointer-to- " inner struct" member forbidden?

答案 1 :(得分:1)

您可以使用Bar

中的合适方法解决此问题
struct Bar {
    Foo foo;
    double non_unique_value;
    int get_unique_value() const { return foo.unique_value; }
};

然后使用const_mem_fun

ordered_non_unique<  const_mem_fun<Bar,int,&Bar::get_unique_value> >

答案 2 :(得分:0)

你可以写一个user-defined key extractor来完成工作。