c++ - 将 std::string_view 与需要以空字符结尾的字符串的 api 一起使用

标签 c++ string c++17 null-terminated string-view

我有一个采用 std::string_view 并使用函数的方法,该函数将空终止字符串作为参数。例如:

void stringFunc(std::experimental::string_view str) {
    some_c_library_func(/* Expects null terminated string */);
}

问题是,处理这种情况的正确方法是什么? str.to_string().c_str() 是唯一的选择吗?我真的很想在这个方法中使用 std::string_view,因为我在其中传递了不同类型的字符串。

最佳答案

我通过创建一个名为 zstring_view 的备用 string_view 类解决了这个问题。它是从 string_view 私有(private)继承的,并包含其大部分接口(interface)。

主要区别是 zstring_view 不能从 string_view 创建。此外,任何将从末尾删除元素的 string_view API 都不是接口(interface)的一部分,或者它们返回 string_view 而不是 zstring_view

它们可以从任何以 NUL 结尾的字符串源创建:std::string 等等。我什至为它们创建了特殊的用户定义文字后缀:_zsv

想法是,只要您不手动将非 NUL 终止的字符串放入 zstring_view,所有 zstring_view 都应该以 NUL 终止。与 std::string 一样,NUL 字符不是字符串大小的一部分,但它在那里

我发现它对于处理 C 接口(interface)非常有用。

关于c++ - 将 std::string_view 与需要以空字符结尾的字符串的 api 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48134040/

相关文章:

android - 在 android 代码中创建一个套接字(不在 android 应用程序中)获取权限被拒绝

c++ - 如何在 C++ 项目的 Cmake 文件中添加 Mac OS 框架

html - 让 HTML 识别\n 和\t

java - 为什么我的 Java 输出字符串最后以 % 字符结尾?

c - 从 C 中的文本文件中获取每个字符串的第一个字符

c++ - std::optional 是否更改函数的签名?

c# - C/C++/C# 设置窗口位置 : Window on top of others

c++ - 在 C++ 中同时进行赋值和条件测试

c++ - gcc 中变量模板的错误显式模板特化

c++ - 在 std::deque 中移动元素的有效方法?