我们有一个相当详细的passing data to callee简单机制的集合,没有太多的开销,现在有另一个,也只是一个容器类型.
我不明白为什么提供这种机器只用于字符串,而不是一些更广泛的类型的其他容器.一个明智的答案是我们已经有了这些解决方案.例如在C++17 and beyond演示文稿string_view被解释为observer_ptr< T> (或T *)为字符串.
请注意反对更一般的container_view的参数,与C 17引入的string_view相反.
解决方法
现在,我们将string_view作为一个单独的类型,因为它具有专门的,特定于字符串的接口来匹配basic_string的字符串特定的接口.或者至少要匹配const /非分配接口.
请注意,container_view或任何您称之为无法擦除与生成它的容器的连接.或者至少不是在每个访问/操作上都不支付类型擦除开销.
相比之下,string_view基于const char * s和整数.那个课不关心字符串来自哪里;它提供了一个连续的字符数组的视图,无论谁拥有它.它可以做到这一点,因为它知道源是一个连续的数组,因此使用指针作为它的迭代器的核心.
你不能为任意容器这样做.您的container_view< vector>将有来自container_view< list>的不同迭代器管他呢.它必须这意味着如果您将container_view作为函数参数,则必须选择要使用的特定容器(强制用户准确提供该容器类型),使您的函数成为模板,或者使用类型删除的迭代器范围(因此比较慢).
还有关于GSL类型跨度和string_span的C-17后提议.前者表示(可能是多维)连续阵列的可修改的“视图”.后者表示连续字符串的可修改的“视图”.