【发布时间】:2012-05-23 15:17:22
【问题描述】:
它似乎是一个包含 10 个东西的硬编码模板,但也有一个与 Lokki 的 Typelist 非常相似的 cons 模板类的实现。那么 boost tuple 模板是否只是 Typelist/cons 实现的包装器?或者它的要点是什么?
【问题讨论】:
-
我相信你已经经历过这个,但尽管如此:boost.org/doc/libs/1_42_0/libs/tuple/doc/…
它似乎是一个包含 10 个东西的硬编码模板,但也有一个与 Lokki 的 Typelist 非常相似的 cons 模板类的实现。那么 boost tuple 模板是否只是 Typelist/cons 实现的包装器?或者它的要点是什么?
【问题讨论】:
在 C++03 中(否则我们将谈论 std::tuple)没有可变参数模板功能,因此它使用足够数量的参数 (*) 和特定默认值进行模拟。
您可以通过阅读Design decisions rationale 获得实际实现的提示:
cons 列表的结束标记(nil, null_type, ...)
元组在内部表示为 cons 列表:
tuple<int, int>继承自
cons<int, cons<int, null_type> >
null_type是列表的结束标记。原提案是nil, 但是这个名字是在 MacOS 中使用的,可能会引起问题,所以 而是选择了null_type。考虑的其他名称是null_t和unit(SML 中的空元组类型)。注意
null_type是一个空元组的内部表示:tuple<>继承自null_type。
(*) 通常在 Boost 中,代码是使用宏生成的,因此上限是可配置的。
【讨论】: