我正在尝试创建一个boost :: multi_index容器,它使用带参数的成员函数作为键。
class Data {
public:
std::string get(const std::string & _attr) { return _internals_fetch_data(_attr); }
/*
assume some implementation for storing data in some structure(s)
*/
};
假设我有一个矩形这些数据项的列表,我想要多个指标。 矩形表示列表中的所有项目都通过get()
具有相同的属性boost :: multi_index声明类似于
typedef multi_index_container<
Data,
indexed_by<
ordered_unique<
BOOST_MULTI_INDEX_CONST_MEM_FUN(Data,String,get)
>
>
> my_container;
BOOST_MULTI_INDEX_CONST_MEM_FUNCT()除外,没有这些功能。 复合键仍然适用于成员变量。
我如何解决这个问题? 它看起来不像我可以给ordered_unique&lt;&gt;一个boost :: function1
编辑:
经过一番思考,这是我要做的事情的要点。
boost :: multi_index确定它在编译期间的索引功能。如何规避这些功能并使用运行时确定的索引?
答案 0 :(得分:2)
你认为作为参数传递给函数是什么?什么是const std::string & _attr
?
无论如何,BOOST_MULTI_INDEX_CONST_MEM_FUN
只是const_mem_fun
仿函数的一个宏。你可以编写自己的仿函数const_mem_fun1
。但我不知道你将如何使用它。 const_mem_fun
的实现通过引用(或包装器,例如shared_ptr
)接收对象,然后它调用没有参数的成员函数。
boost::multi_index::indexed_by
期望类型,而不是对象,以及ordered_unique
期望类型。这就是你不能写const_mem_fun1<Data, std::string, &Data::get>("string")
的原因。为什么不能在没有参数的情况下使用函数get
并在Data
struct中创建特殊的字符串字段?
struct Data {
std::string _attr;
public:
std::string get() const { return _internals_fetch_data(_attr); }
};