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
字符串