I solved this problem by creating an alternate string_view
class called zstring_view
. It's privately inherited from string_view
and contains much of its interface.
The principal difference is that zstring_view
cannot be created from a string_view
. Also, any string_view
APIs that would remove elements from the end are not part of the interface or they return a string_view
instead of a zstring_view
.
They can be created from any NUL-terminated string source: std::string
and so forth. I even created special user-defined literal suffixes for them: _zsv
.
The idea being that, so long as you don't put a non-NUL-terminated string into zstring_view
manually, all zstring_view
s should be NUL-terminated. Like std::string
, the NUL character is not part of the size of the string, but it is there.
I find it very useful for dealing with C interfacing.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…