2009-09-02 110 views
0

我想要使用成员函数w /参数作为键的boost :: multi_index容器。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) 
*/ 
}; 

假设我有过想多indicies这些数据项的矩形名单。 矩形意味着在列表中的所有项目通过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 ::功能1

编辑:

经过一番思考,这里是我想要做的要点。

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

回答

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 Data { 
    std::string _attr; 
public: 
    std::string get() const { return _internals_fetch_data(_attr); } 
}; 
+0

这就是问题所在。看起来我不能在这里使用_const_mem_fun1_。 – 2009-09-02 19:18:17

+0

你认为如何传递参数?像'ordered_unique (“string”)>'? – 2009-09-02 19:24:49

+0

也许(“字符串”)可以作为另一个参数的结构/包装。 – 2009-09-02 19:58:20