如何用vstring替换std :: string?

nos*_*sid 7 c++ string libstdc++ c++11

我最近了解到,自几年以来,libstdc ++库包含vstring(也称为versa_string),它提供了相同的功能std::string,但显然更符合C++标准.我曾试图用它vstring作为替代品std::string,但我发现没有简单的方法可以做到.

有没有一种简单的方法来代替std::stringvstring,在不改变的libstdc ++源代码?

我可以用std::string别名替换代码中的所有用法,如下面的清单所示.然而,这种方法的问题在于,它std::string也在某些地方内部使用,例如在std::ostringstream.这意味着,这些陈述std::ostringstream os; my::string s = os.str();不再适用.

namespace my {
#ifdef __GLIBCXX__
    using string = __gnu_cxx::__vstring;
#else
    using string = std::string;
#endif
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ely 5

没有,没有办法更换std::stringvstring,它的目的是作为一种替代字符串类型,而不是下降的替代产品std::string

自GCC 5.1以来,该库附带了两个实现,std::string并且对于任何给定的转换单元,您可以选择通过_GLIBCXX_USE_CXX11_ABI宏使用哪个.这两种字符串类型具有不同的错位名称,因此不兼容链接.

有关详细信息,请参阅Dual ABI.