它似乎是一个包含 10 个东西的硬编码模板,但也有一个与 Lokki 的 Typelist 非常相似的 cons 模板类的实现。那么 boost tuple 模板是否只是 Typelist/cons 实现的包装器?或者它的要点是什么?
问问题
694 次
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_t
andunit
(SML 中的空元组类型)。请注意,这
null_type
是一个空元组的内部表示:tuple<>
继承自null_type
.
(*) 通常在 Boost 中,代码是使用宏生成的,因此上限是可配置的。
于 2012-05-23T15:27:23.457 回答