使用类型列表

时间:2011-04-07 12:40:17

标签: c++ typelist

Typelist(在Alexandrescu的意义上定义它)主要/ essentialy有用于生成类的层次结构(也许对于像boost :: tuple这样的类) 或者还有很多其他域名,其中typelist非常有用吗?

4 个答案:

答案 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();

除此之外,还有一个用于迭代和内置支持仿函数的界面。

好处是您可以根据需要独立或均匀地治疗孩子。

缺点是你牺牲了一定程度的抽象性。事情变得更加具体。它还引入了一种处理合成的新方法,这对于需要使用代码的其他人来说是一个新的东西。

对于我们来说,在我们使用它的地方,这是一个很好的选择。