Я определяю бустерный мультииндексный контейнер:
namespace bmi = boost::multi_index;
struct DijkstraTriplet {
...
};
typedef multi_index_container <
DijkstraTriplet,
bmi::indexed_by<
bmi::ordered_unique<bmi::member<DijkstraTriplet,size_t,&DijkstraTriplet::linkId> >,
bmi::ordered_non_unique<bmi::identity<DijkstraTriplet> >
>
> DijkstraTripletContainer;
в какой-то момент я заполняю его данными и хотел бы просмотреть один из его индексов. Для этого я определяю итератор:
DijkstraTripletContainer::nth_index<0>::type::iterator it;
(используя старый компилятор). Это невероятно долго и неловко. Чтобы сделать его короче и более читабельным, я добавил следующие строки:
#define dtt0 DijkstraTripletContainer::nth_index<0>::type
#define dtt1 DijkstraTripletContainer::nth_index<1>::type
и затем использовал dtt0 :: iterator (который элегантно короткий, но в то же время уродливый, потому что выражается в терминах #defines). Есть ли более элегантный способ иметь ярлык без #defines? Я ищу что-то такое же элегантное, как
namespace bmi = boost::multi_index;
Комментарии?
typedef DijkstraTripletContainer::nth_index<0>::type dtt0;
Других решений пока нет …