函数调用带参数的boost :: multi_index索引

时间:2009-09-02 18:08:08

标签: c++ boost function boost-multi-array

我正在尝试创建一个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确定它在编译期间的索引功能。如何规避这些功能并使用运行时确定的索引?

1 个答案:

答案 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); }
};