字符串类型的转换

5 c++ c++builder

C++中有很多字符串类型:WideString、UnicodeString、String、wstring、string、AnsiString、Variant

在我的代码中有很多转换,例如

WideString s1 = UnicodeString ( wstring(s2.str().c_str()).c_str()).c_str();
Run Code Online (Sandbox Code Playgroud)

这就是一个字:令人困惑!

有没有一种简单的方法可以用一个助手类处理所有字符串转换,而不再考虑如何将一种字符串类型转换为另一种类型,例如:

s1 = sc(s2);    // sc = string-converter
Run Code Online (Sandbox Code Playgroud)

或者

sc(s1,s2);      // s1 = convert to, s2 = convert from
Run Code Online (Sandbox Code Playgroud)

Mar*_*vic 0

创建一个包装类来处理所有可能的转换。您可以使用模板类,但请注意,您必须进行额外的模板专业化,因为大多数这些转换无法以通用方式表达。例如,您可以通过强制转换轻松地从 转换WideStringUnicodeString ,但不能简单地强制转换wstringstring。对于可以强制转换的类型,您可以使用通用部分:

template <class TypeFrom, class TypeTo>
TypeTo convert(const TypeFrom &from)
{
    return static_cast<TypeTo>(from);
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于wstringto的转换string。您需要一个专门化的模板:

template <>
std::string convert<std::wstring, std::string>(const std::wstring &from)
{
    return std::string(from.begin(), from.end());
}
Run Code Online (Sandbox Code Playgroud)

此处不可能列出所有组合,您必须注意这一点。这是可以帮助进行一些转换的链接:

https://msdn.microsoft.com/en-us/library/ms235631.aspx