一个可移植的,类似std :: string的字符串类,它不是std :: string

时间:2016-06-04 20:13:21

标签: string c++11 compatibility stdstring vstring

对于各种(C ++ 11 std :: string-change-related)原因,我想在我的C ++ 11-ish代码中的某些地方使用非std :: string字符串类,这需要同意几个C ++编译器的几个版本。

现在,我并不介意我的字符串是以前C ++ 11风格还是后C ++ 11方式运行;而且我也不关心表现。我只想要一个可靠的字符串类,在任何情况下都不会给我带来std::__cxx11::string和其他类似巫术的错误。

我有什么选择?我可以/我应该在我自己的头文件中复制一些单个编译器的实现吗? GCC的vstring是一个选择吗?还有别的吗?

1 个答案:

答案 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;
  }    
};

这满足了您在评论中提出的最低要求。