2013-07-11 17 views
0

ADDRES我有一個結構:Boost.MultiIndex的和的值作爲關鍵

struct user_context { 
    struct user_id; 
    struct user_name; 
    struct user_address; 

    boost::int64_t user_id() const; 
    const std::string& user_name() const; 
}; 

我想使用boost.multiindex用三個指標:1)USER_ID,2)USER_NAME,3)user_context對象的地址

我不知道,如何編寫user_context類型的對象的地址的關鍵規範。

typedef std::shared_ptr<user_context> user_context_ptr; 

typedef boost::multi_index::multi_index_container< 
    user_context_ptr 
    ,boost::multi_index::indexed_by< 
     boost::multi_index::hashed_unique< 
      boost::multi_index::tag<user_context::user_id> 
      ,boost::multi_index::const_mem_fun< 
       user_context 
      ,boost::int64_t 
      ,&user_context::user_id 
      > 
     >, 
     boost::multi_index::hashed_unique< 
      boost::multi_index::tag<user_context::user_name> 
      ,boost::multi_index::const_mem_fun< 
       user_context 
       ,const std::string& 
       ,&user_context::user_name 
      > 
     >, 
     boost::multi_index::hashed_unique< 
      boost::multi_index::tag<user_context::user_address> 
       ,boost::multi_index:: ??? <      // <<< 
        user_context 
       ,user_context* (???)       // <<< 
       ,???           // <<< 
       > 
      > 
    > 
> users_container; 

謝謝。

回答

3

使用boost::multi_index::identity<user_context_ptr>:(因爲它與常規的指針會發生),如果他們指向同一個對象的兩個共享的指針是等價

+0

我需要第三個指數將原始指針,而不是智能指針。謝謝! – niXman

+0

然後使用const_mem_fun 。 –