【发布时间】:2014-10-20 19:05:22
【问题描述】:
我对 Boost.MPL 有疑问,不知道如何解决。目前我的代码 看起来像这样:
struct Definition {
typedef boost::mpl::int_<5> A;
typedef boost::mpl::int_<3> B;
typedef boost::mpl::int_<6> C;
typedef boost::mpl::int_<1> D;
// (...)
typedef boost::mpl::vector<
A
,B
,C
,D
// (...)
> Seq;
};
这里,mpl::int_< N > 中的数字 N 表示任意小数
数字。然后其他一些代码计算这些数字的总和
“key”定义的类型,例如对于Definition::D,总和是 5 + 3 + 6
(A + B + C)。这需要在编译时完成。这就是我使用的原因
mpl::vector 和一些适当的元编程。
我不喜欢当前的方法,因为它在某种程度上违反了 DRY 规则。
我想知道是否可以提供这样的结构
无需在mpl::vector 中重复类型名称即可定义
Seq 类型。换句话说,我可能需要一堆宏
将允许我编写这样的代码:
struct Definition {
FIELD(A, 5);
FIELD(B, 3);
FIELD(C, 6);
FIELD(D, 1);
// (...)
GEN_SEQ() // only if really needed
};
然后Definition::A 仍将引用boost::mpl::int_<5>,或者
至少可以让我以某种方式访问boost::mpl::int_<5>,并且
Definition::Seq 会给我适当的 MPL 序列。
当然,这只是我的想象。代码可能看起来不同,我是 只是在寻找选择。
【问题讨论】: