我有一个typedef char char_t
which 也可以typedef wchar_t char_t
,我想要的是一个通用的cout
.
我有一个util
我想要的命名空间util::cout
,std::cout
如果char_t
是char
,std::wcout
如果char_t
是wchar_t
问问题
958 次
3 回答
2
是没有问题; static
您可以使用包含对适当对象的引用的模板特化来做到这一点。
template<typename T> struct select_cout;
template<> struct select_cout<char> { static std::ostream &cout; };
std::ostream &select_cout<char>::cout = std::cout;
template<> struct select_cout<wchar_t> { static std::wostream &cout; };
std::wostream &select_cout<wchar_t>::cout = std::wcout;
std::basic_ostream<char_t> &cout = select_cout<char_t>::cout;
于 2012-08-15T09:53:22.523 回答
1
您正在重新发明 MS 的一个糟糕的设计(至少在此时此地,也许这是一个不错的决定)。
请注意,所有其他平台最有可能使用 UTF-8 进行输出,因此通过std::cout
输出的 UTF-8 字符串就可以了。在 Windows 上,控制台上的 Unicode 输出无论如何都不可能正确(由于字体和损坏的控制台代码页)。
简而言之,没有理由想要这样的东西,你最好使用其中一个,而不是两者。
于 2012-08-15T09:44:36.297 回答
0
如果您正在阅读宽格式文件并使用我从评论中挑选的多字节程序,那么解决方案可能是 . . .
您可以将文件内容作为输入读取std::wstring
到程序内存中,并用于wcstombs_s()
将从文件中读取的字符串转换为多字节字符串。
本质上,字符串的格式并不重要,您可以随时根据需要更改它。
于 2018-09-24T16:08:54.393 回答