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