我有一個Boost.MPL的問題,我不知道如何處理它。目前,我的代碼 看起來是這樣的:一次性使用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;
};
這裏,N
在mpl::int_<N>
表示一些任意的十進制 數目。然後一些其他代碼計算這些數字的總和,直到由「鍵」定義的類型,例如 。對於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序列。
這是我的想象。代碼可能看起來不一樣,我只是尋找選擇 。