根据typedef可以是wcout的通用cout
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据typedef可以是wcout的通用cout相关的知识,希望对你有一定的参考价值。
我有一个typedef char char_t
,也可以是typedef wchar_t char_t
,我想要的是一个通用的cout
。
我有一个util
命名空间我想要一个util::cout
,如果std::cout
是char_t
和char
将std::wcout
如果char_t
是wchar_t
答案
是没有问题;你可以使用模板专门化来保存对相应对象的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;
另一答案
你正在重塑一个可怕的(至少在这里,现在,或许这是一个很好的决定)MS设计。
请注意,每个其他平台最有可能使用UTF-8进行输出,因此通过std::cout
的UTF-8字符串输出就可以了。在Windows上,无论如何都无法在控制台上输出Unicode输出(由于字体和破坏的控制台代码页)。
简而言之,没有理由想要这样的事情,你最好不要使用其中之一,而不是两者兼而有之。
另一答案
如果您正在以宽格式阅读文件并使用我从评论中选择的多字节程序,那么解决方案就可以了。 。 。
您可以将文件内容作为std::wstring
读入程序存储器,并使用wcstombs_s()
将从文件读取的字符串转换为多字节字符串。
从本质上讲,字符串的格式无关紧要,您可以随时随地更改字符串。
以上是关于根据typedef可以是wcout的通用cout的主要内容,如果未能解决你的问题,请参考以下文章