struct eventinfo_t {
long eventId; /** index **/
long groupId; /** index **/
bool isMarked; /** index **/
bool isHovered; /** index **/
};
typedef multi_index_container<
eventinfo_t,
indexed_by<
/* 0 */ ordered_unique< member<eventinfo_t, long, &eventinfo_t::eventId>>,
/* 1 */ ordered_non_unique< member<eventinfo_t, long, &eventinfo_t::groupId>>,
/* 2 */ ordered_unique<
composite_key<
eventinfo_t,
member<eventinfo_t, bool, &eventinfo_t::isMarked>,
member<eventinfo_t, long, &eventinfo_t::eventId>
>
>
>
> eventmap_t;
Получается, чтобы вывести тип второй части композитного ключа нужно написать довольно нетривиальное выражение:
eventmap_t::nth_index<2>::type::key_type::composite_key_type::key_extractor_tuple::tail_type::head_type::result_type
Если бы частей в композитном ключе было больше, то нужно было бы писать:
...key_extractor_tuple::tail_type::[tail_type:: x <нужная часть>]head_type::result_type
Может есть другой способ?..