【问题标题】:Why do STL container adapters require both value and container type as template parameters?为什么 STL 容器适配器需要值和容器类型作为模板参数?
【发布时间】:2021-12-04 01:59:14
【问题描述】:

第一个参数T不能从Container::value_type推导出来吗?

【问题讨论】:

标签: c++ templates stl


【解决方案1】:

这意味着要在容器适配器中使用,容器必须提供嵌套的 typedef value_type。当然,标准库中的所有容器都这样做——但这并不是可能的容器的全部。

目前,stack 要求:任何支持操作 back()push_back()pop_back() 的序列容器都可以用于实例化 stack

【讨论】:

【解决方案2】:

容器适配器是较旧的 C++ 本身。

它们是一个比实际更简洁的想法。因此,根据我的经验,它们往往会被忽视。

另外,主要供应商的一些不幸的 ABI 选择使得向模板添加或更改默认参数成为 ABI 破坏问题。

所以,我们得到了 20 世纪之前的模板参数,没有 value_type 推论。

另外,stack<T> 的语法似乎比 stack<deque<T>> 更简洁。

【讨论】:

  • 虽然我原则上同意,但它们的用处大多超出了问题的范围,因为我正在询问明显多余的模板参数之间的任何技术/基本原因。尽管您的最后一句话似乎为它提供了最合乎逻辑的解释 - 它只是提供了更简洁的语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多