我正在使用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
?我理解为什么我所做的不起作用:我应该传达Foo
是Bar
成员的类型并且正在做更类似Bar::Foo::some_value
的事情,但目前还不清楚我如何指定这一点。
答案 0 :(得分:2)
有关此功能的问题会不时弹出,因为它确实是一个非常合乎逻辑的事情。但不幸的是,它不是语言的一部分。
答案 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来完成工作。