【发布时间】:2019-08-08 02:33:59
【问题描述】:
我一直在将使用自制 span 类的旧代码更新为更符合 C++20 std::span 的代码,但由于 std::span 没有 size_type 而出现编译错误而是有index_type。关于 index_type 是否应该签名的问题一直存在巨大的争议,但为什么要跳过 size_type 呢?这破坏了期望容器(或类似容器的对象)具有size_type 的通用代码。
【问题讨论】:
-
proposal 为此在 R2 中添加了
difference_type,因此我怀疑添加size_type的提议对于 C++20 来说是公平的。 -
这可能是最好的答案,克里斯
-
@Lyberta ... 什么?我只是想问一下您实际上使用
X::size_type是为了什么 - 我认为我以前从未见过这样的代码,所以我试图了解这个问题的动机。 -
@Lyberta:“在包装容器时,您通常会暴露它们的类型。”
span非常不是容器。期望类似容器行为的代码可能会以编译器无法检测到的方式失败。size_type的存在与否与这些错误无关。 -
string_view有size_type因为string有;string_view的设计意图是作为string const&类型函数参数的直接替代品。 不是span的意图是替代vector const&类型的参数。