我有一个采用 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/