2009-09-02 77 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