2

它似乎是一个包含 10 个东西的硬编码模板,但也有一个与 Lokki 的 Typelist 非常相似的 cons 模板类的实现。那么 boost tuple 模板是否只是 Typelist/cons 实现的包装器?或者它的要点是什么?

4

1 回答 1

4

在 C++03 中(因为否则我们将讨论std::tuple)没有可变参数模板功能,因此它使用足够数量的参数 (*) 和特定默认值来模拟。

您可以通过阅读设计决策原理来获得实际实现的提示:

cons 列表的结束标记 (nil, null_type, ...)

元组在内部表示为 cons 列表:

tuple<int, int>

继承自

cons<int, cons<int, null_type> >

null_type是列表的结束标记。最初的提议是nil,但这个名字在 MacOS 中使用,并且可能会导致问题,所以 null_type被选择了。考虑的其他名称是null_tand unit(SML 中的空元组类型)。

请注意,这null_type是一个空元组的内部表示: tuple<>继承自null_type.

(*) 通常在 Boost 中,代码是使用宏生成的,因此上限是可配置的。

于 2012-05-23T15:27:23.457 回答