我正在定义一个 boost 多索引容器:
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;
评论?