namespace settings{
typedef wchar_t char_t;
typedef std::basic_string<char_t> string_t;
}
namespace util{
namespace string{
std::basic_string<wchar_t> toWide(const std::basic_string<char>& s);
std::basic_string<char> fromWide(const std::basic_string<wchar_t>& w);
}
}
这就是我所拥有的。char_t可能是wchar_t或char。现在我想要两个智能转换输入字符串的函数settings::string_t
settings::string_t from(const std::basic_string<char>& s);
settings::string_t from(const std::basic_string<wchar_t>& s);
usingboost::is_same不起作用,return s因为string_t typedef'ed as wstring 但返回字符串
settings::string_t util::string::from(const std::basic_string< char >& s){
if(boost::is_same< std::basic_string<char> , settings::string_t >::value){
return s;
}else{
return toWide(s);
}
}
InputType使用模板和重载来识别是否string_t相同是东方的,但如果它们不同,则有 4 种变体。
如何在不重载类型运算符的情况下对这种情况进行建模?
概括
如何设计settings::string_t from(const std::basic_string<T>& s);将char和wchar字符串都转换为string_t. 其中 T 也可以是char或wchar_t。你可以在问题中看到string_t是灵活的。它也可以是两者char或wchar_t字符串