根据typedef可以是wcout的通用cout

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据typedef可以是wcout的通用cout相关的知识,希望对你有一定的参考价值。

我有一个typedef char char_t,也可以是typedef wchar_t char_t,我想要的是一个通用的cout。 我有一个util命名空间我想要一个util::cout,如果std::coutchar_tcharstd::wcout如果char_twchar_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的主要内容,如果未能解决你的问题,请参考以下文章

控制台输出宽字符wchar_t的中文显示问题

提升python typedef

iostream/fstream中的输入输出流指针的绑定,tie函数的使用。

内部 typedef 根据父类而变化

根据Unicode码生成汉字

通用的二维数组