我们有一个相当详细的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后提议.前者表示(可能是多维)连续阵列的可修改的“视图”.后者表示连续字符串的可修改的“视图”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。