在它的核心,如何实现提升元组(在提升标头中没有所有额外的细节)

At it's core, how is boost tuple implemented (without all the extra details in the boost header)

本文关键字:细节 实现 元组 核心 何实现      更新时间:2023-10-16

它似乎是一个包含 10 件事的硬编码模板,但还有一个与 Lokki 的 Typelist 非常相似的 cons 模板类的实现。那么提升元组模板只是 Typelist/cons 实现的包装器吗?或者它的要点是什么?

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

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

缺点列表的结束标记(无、null_type、...

元组在内部表示为缺点列表:

tuple<int, int>

继承自

cons<int, cons<int, null_type> >

null_type是列表的结束标记。最初的命题是nil, 但是该名称在MacOS中使用,并且可能会导致问题,因此 null_type被选中了。考虑的其他名称是null_tunit(SML 中的空元组类型(。

请注意,null_type是空元组的内部表示形式: tuple<>继承自null_type

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