среда, 2 июля 2008 г.

Дебри boost::multi_index

На днях пришлось выводить тип части композитного ключа в boost::multi_index. Результат меня поразил своим размером... Смотрите сами, для кода ниже:


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


Может есть другой способ?..

Комментировать в ВКонтакте