对于各种(C ++ 11 std :: string-change-related)原因,我想在我的C ++ 11-ish代码中的某些地方使用非std :: string字符串类,这需要同意几个C ++编译器的几个版本。
现在,我并不介意我的字符串是以前C ++ 11风格还是后C ++ 11方式运行;而且我也不关心表现。我只想要一个可靠的字符串类,在任何情况下都不会给我带来std::__cxx11::string
和其他类似巫术的错误。
我有什么选择?我可以/我应该在我自己的头文件中复制一些单个编译器的实现吗? GCC的vstring是一个选择吗?还有别的吗?
答案 0 :(得分:0)
template<class T>
struct crappy_string {
mutable std::vector<T> buffer;
T const* c_str() const {
if (buffer.empty() || buffer.back())
buffer.push_back(0);
return buffer.data();
}
friend bool operator<( crappy_string const& lhs, crappy_string const& rhs ) {
lhs.c_str(); rhs.c_str(); // ensure null terminator in both
return lhs.buffer < rhs.buffer;
}
};
这满足了您在评论中提出的最低要求。