在使用C ++进行原型设计和游戏时,尝试使用一些概念来创建一个支持utf8的不可变字符串,我坚持以下两难:
有没有办法返回字符串的不可变视图。比如,我希望能够返回引用原始字符串一部分的子字符串,而不是返回子字符串。
// Just some quick prototyping of ideas.
// Heavier than just a normal string.
// Construction would be heavier too because of the indices vector.
// Size would end up being O1 though.
// Indexing would also be faster.
struct ustring {
std::string data;
std::vector<size_t> indices;
// How do I return a view to a string?
std::string operator [](size_t const i) const {
return data.substr(indices[i], indices[i + 1] - indices[i]);
}
};
答案 0 :(得分:4)
听起来std::string_view
就是你的课程!如果您不支持C ++ 17,请尝试std::experimental::string_view
。如果没有,请试用boost::string_view
。所有这些选择都可以以相同的方式使用(只需用您使用的任何内容替换std::string_view
):
std::string_view operator [](size_t const i) const {
return std::string_view(&data[i], 1);
}
欢迎来到C ++,那里总是有另一个厨房水槽!