为什么
我知道
我猜这似乎不可能,因为这太直截了当了,肯定已经被想过了,例如g++的libstdc++库中并没有这样做(我没有查看其他库的源代码)。这个定义的问题是什么?它只是会破坏标准库的二进制兼容性吗?
std::pair<A,B>
和std::tuple<A,B>
不同?我一直觉得用一个替代另一个很奇怪。它们在某种程度上是可转换的,但有限制。我知道
std::pair<A,B>
必须有两个数据成员A first
和B second
,所以它不能仅仅是std::tuple<A,B>
的类型别名。但我直觉上认为我们可以专门针对恰好包含两个元素的元组,在定义上等同于标准要求std::pair
的定义。然后将其别名为std::pair
。我猜这似乎不可能,因为这太直截了当了,肯定已经被想过了,例如g++的libstdc++库中并没有这样做(我没有查看其他库的源代码)。这个定义的问题是什么?它只是会破坏标准库的二进制兼容性吗?
tuple
实现不是递归的。 - Columbotuple<Ts...>
进行模板参数推导变得不可能。 - T.C.std::pair
已经成为 C++98 的一部分,std::tuple
(但没有可变参数模板)随后出现在 TR1 中。当时由于几个原因,将具有 2 个元素的tuple
别名为pair
是不可能的。模板别名和可变参数模板是 C++11 引入的。即使有了这些,也不能将pair
与tuple
的特化合并,否则会破坏一些现有代码。 - koraxkorakos