c++ - 在未来的 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++ 版本中是否有可能将额外的模板参数添加到容器中?
解决方案
正如 NathanOliver 在评论中指出的那样,添加容器模板参数会破坏许多假定参数数量的遗留代码。因此,委员会是否会这样做是值得怀疑的。
正如 Jarod42 在评论中指出的那样,<typename Ts...>
不处理将来可能添加的非类型模板参数(但值得怀疑,见上文)。
因此,使用<typename Ts...>
over可能没有任何好处<typename T, typename A>
,只是它对于诸如unordered_map
(eg <typename K, typename T, typename H, typename E, typename A>
) 之类的容器更短。
推荐阅读
- c - 释放单链表的内存时出现无效的 free() 错误
- vim - Vim,映射非标准键(前进/后退/放大/缩小/收藏夹)
- windows - 用于从子文件夹和子文件夹中的文件中删除破折号的 Windows 批处理脚本
- regex - Fluent-Bit 是如何提取日志时间的,并且仍然保留原始日志时间的输出?
- python - 在 Tk.Canvas 中制作新的 Pillow 图像时,为什么数组有效但变量无效?
- c# - C# Stopwatch vs Thread.Sleep:不同的经过毫秒
- docker - 在 Windows 10 上运行 docker
- express - 更改文件时重新构建下一个应用程序(使用 express 作为服务器)
- javascript - 发送不和谐的“say”命令消息参数时遇到问题
- flask - 使用 WTForms 和 Flask Admin 选择多个字段