1

我正在定义一个 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;

评论?

4

1 回答 1

5
typedef DijkstraTripletContainer::nth_index<0>::type dtt0;
于 2012-12-13T15:15:08.887 回答