c ++ boost命名空间(而不仅仅是)名称快捷方式

art*_*hur 1 c++ boost shortcut

我正在定义一个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;
Run Code Online (Sandbox Code Playgroud)

在某些时候,我正在填充数据,并希望扫描其中一个索引.为此我定义了一个迭代器:

DijkstraTripletContainer::nth_index<0>::type::iterator it;
Run Code Online (Sandbox Code Playgroud)

(使用旧的编译器).这令人难以置信的漫长而尴尬.为了使它更短,更可读,我添加了这些行:

#define dtt0 DijkstraTripletContainer::nth_index<0>::type
#define dtt1 DijkstraTripletContainer::nth_index<1>::type
Run Code Online (Sandbox Code Playgroud)

然后使用dtt0 :: iterator(优雅地简短,但同时又丑陋,因为用#defines表示).有没有#defines的快捷方式有更优雅的方法吗?我看起来像一样优雅

namespace bmi = boost::multi_index;
Run Code Online (Sandbox Code Playgroud)

评论?

小智 5

typedef DijkstraTripletContainer::nth_index<0>::type dtt0;
Run Code Online (Sandbox Code Playgroud)

  • 我想知道自己是怎么想的.最有可能的,因为它是命名空间和类型的组合. (2认同)