2013-07-11 5 views
0

같은 값의 요지는 내가 구조체를 가지고 :boost.multiindex 키

나는 세 인덱스 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; 
}; 

다음 user_context 객체의 1) USER_ID, 2) USER_NAME, 3) 주소

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 을 사용하십시오. –