0

我正在尝试制作一个 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<> 一个 boost::function1

编辑:

经过一番思考,这是我正在尝试做的事情的要点。

boost::multi_index 在编译时确定它的索引特性。如何规避这些功能并使用运行时确定的索引?

4

1 回答 1

2

你想把什么作为参数传递给函数?是什么const std::string & _attr

无论如何,BOOST_MULTI_INDEX_CONST_MEM_FUN它只是const_mem_fun函子的一个宏。您可以编写自己的 functor 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 Data {
  std::string _attr;
public:
  std::string get() const { return _internals_fetch_data(_attr); }
};
于 2009-09-02T18:30:05.563 回答