【发布时间】:2021-12-04 01:59:14
【问题描述】:
第一个参数T不能从Container::value_type推导出来吗?
【问题讨论】:
-
是的,从 C++17 开始,这是可能的,例如,请参阅 deduction guides for
std::stack。
第一个参数T不能从Container::value_type推导出来吗?
【问题讨论】:
std::stack。
这意味着要在容器适配器中使用,容器必须提供嵌套的 typedef value_type。当然,标准库中的所有容器都这样做——但这并不是可能的容器的全部。
目前,stack 要求:任何支持操作 back()、push_back() 和 pop_back() 的序列容器都可以用于实例化 stack。
【讨论】:
value_type (en.cppreference.com/w/cpp/named_req/Container)
容器适配器是较旧的 C++ 本身。
它们是一个比实际更简洁的想法。因此,根据我的经验,它们往往会被忽视。
另外,主要供应商的一些不幸的 ABI 选择使得向模板添加或更改默认参数成为 ABI 破坏问题。
所以,我们得到了 20 世纪之前的模板参数,没有 value_type 推论。
另外,stack<T> 的语法似乎比 stack<deque<T>> 更简洁。
【讨论】: