首页 > 解决方案 > 在未来的 C++ 版本中是否会添加额外的容器模板参数?

问题描述

我正在开发(又一个)支持 C++ 标准容器的序列化工具包。为了使我的工具包更具前瞻性,我正在考虑使用像这样的可变参数模板参数

template <typename... Ts>
void (Writer& w, const std::vector<Ts...>& v) noexcept
{
    using ValueType = typename std::vector<Ts...>::value_type;
    // serialize vector elements
}

而不是像这样固定数量的模板参数

template <typename T, typename A>
void (Writer& w, const std::vector<T,A>& v) noexcept
{
    using ValueType = T;
    // serialize vector elements
}

在未来的 C++ 版本中是否有可能将额外的模板参数添加到容器中?

标签: c++templatesstlcontainersvariadic-templates

解决方案


正如 NathanOliver 在评论中指出的那样,添加容器模板参数会破坏许多假定参数数量的遗留代码。因此,委员会是否会这样做是值得怀疑的。

正如 Jarod42 在评论中指出的那样,<typename Ts...>不处理将来可能添加的非类型模板参数(但值得怀疑,见上文)。

因此,使用<typename Ts...>over可能没有任何好处<typename T, typename A>,只是它对于诸如unordered_map(eg <typename K, typename T, typename H, typename E, typename A>) 之类的容器更短。


推荐阅读