【发布时间】:2016-06-16 08:11:09
【问题描述】:
受到this question 的启发,我开始思考完美的std::pair 应该是什么样子。压缩对类(例如boost's)提供了一个对,当其中一个类型为空类时,其大小会减小。压缩对需要 getter(first()、second())来隐藏具有空类型的成员不存在的事实。
其次,根据C++ docs:“对是元组的一种特殊情况”,但它们被实现为一个单独的类。为什么不使用部分模板特化,例如
template <typename ...Args> class tuple {};
template <typename T1, typename T2> class tuple<T1, T2> {}; // Implements a compressed pair
template <typename T1, typename T2> using pair = tuple<T1, T2>;
此外,为了提供更统一的 API,可以为 pair 重载 std::get 和 std::set,并放弃 first() 和 second() 访问器。或者一个可以同时拥有:)
问题
为什么
std::pair不是std::tuple的特化?什么时候可以使用
std::pair而不是压缩对?而且即使有情况,也应该默认是压缩对吗?为什么没有压缩元组类?
【问题讨论】:
-
答案 1 可能是因为
std::pair在 C++11 中引入std::tuple之前很久就已经在标准中了。 -
@JoachimPileborg 好点,但是我认为将
std::pair重写为std::tuple的特化不会破坏向后兼容性,从而使first和second暴露。虽然这可能会导致更多的混乱而不是它的价值。
标签: c++ templates stl std-pair stdtuple