Typelist(在Alexandrescu的意义上定义它)主要/ essentialy有用于生成类的层次结构(也许对于像boost :: tuple这样的类) 或者还有很多其他域名,其中typelist非常有用吗?
答案 0 :(得分:4)
它也用于Ulrich W. Eisenecker,Frank Blinn和Krzysztof Czarneck所描述的Mixin-Based Programming in C++。
答案 1 :(得分:3)
我相信你指的是模板的链接列表。
这是模板元编程的基本结构。模板元编程具有各种应用程序,程序员在模板中编码问题,元程序实现了解决它的算法。
Boost Spirit通常被认为是模板元编程的一个主要例子,但不幸的是我无法告诉你很多。
答案 2 :(得分:2)
在我看来,类型列表最适合作为其他通用库的构建块,而不是直接在客户端代码中使用。如果Boost元组或MPL足够灵活以满足您的需要,请不要使用较低级别的工具。但是如果你需要这种灵活性,没有什么可以说你不能直接使用类型列表。
答案 3 :(得分:0)
我们使用类型列表作为一种类型安全的组合,但是每个孩子都可以通过单一界面访问:
// Defining a typelist:
typedef TypeList<A,
TypeList<B,
TypeList<C, NullType> > > MyTypeList;
MyTypeList tl;
// Setting values in the typelist:
A a;
tl.set(a);
C c;
tl.set(c);
tl.tail().head() = newB;
// Retrieving values from the typelist:
C c = tl.get<C>();
B b = tl.tail().head();
// To reinitialize a value:
tl.reset<B>();
tl.set(B());
// To get total size:
int size = tl.count();
除此之外,还有一个用于迭代和内置支持仿函数的界面。
好处是您可以根据需要独立或均匀地治疗孩子。
缺点是你牺牲了一定程度的抽象性。事情变得更加具体。它还引入了一种处理合成的新方法,这对于需要使用代码的其他人来说是一个新的东西。
对于我们来说,在我们使用它的地方,这是一个很好的选择。