【发布时间】:2016-10-04 17:06:36
【问题描述】:
出于各种(C++11 std::string-change-related)原因,我想在我的 C++11-ish 代码的某些地方使用非 std::string 字符串类,这需要可以接受多个 C++ 编译器的多个版本。
现在,我真的不介意我的字符串是以 C++11 之前的风格还是 C++11 之后的方式表现的;而且我也不关心性能。我只想要一个不错的可靠字符串类,它在任何情况下都不会给我带来涉及std::__cxx11::string 和其他此类巫术的错误。
我有哪些选择?我可以/应该在我自己的头文件中复制一些单一编译器的实现吗? GCC 的 vstring 是一个选项吗?还有什么?
【问题讨论】:
-
什么是“类字符串”?你说你不关心差异——C++11 做出改变的部分原因是新版本更加线程安全。你能澄清一下你具体想要什么吗?您只是希望它可以转换为两种类型的字符串吗?为什么不能在项目中合适的任何边界在两种类型之间进行转换,为什么需要第三种类型的字符串。为什么你不能使用新的字符串类型在 C++11 中重新编译所有代码和相关库,而忘记整个混乱。
-
@ChrisBeck:假设它实现了
std::string的方法。或者,如果我想更谦虚一点 - 可以用作映射键并具有.c_str()的等价物。线程安全不是必须的。 -
我认为你提到的所有可能性都是选项?该问题没有包含足够的信息来消除其中任何一个问题。您当然可以扮演自己的角色,它可以用作地图键,并在 5 分钟或更短的时间内拥有
.c_str()。 -
@ChrisBeck 或者真的,继承或拥有一个
std::vector<char>并让.c_str()在它的末尾插入一个\0如果缺少。将operator<转发给它,完成。
标签: string c++11 compatibility stdstring vstring