根据typedef可以是wcout的通用cout

问题描述 投票:2回答:3

我有一个typedef char char_t,也可以是typedef wchar_t char_t,我想要的是一个通用的cout。 我有一个util命名空间我想要一个util::cout,如果std::coutchar_tcharstd::wcout如果char_twchar_t

boost typedef boost-mpl c++
3个回答
1
投票

是没有问题;你可以使用模板专门化来保存对相应对象的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;

1
投票

你正在重塑一个可怕的(至少在这里,现在,或许这是一个很好的决定)MS设计。

请注意,每个其他平台最有可能使用UTF-8进行输出,因此通过std::cout的UTF-8字符串输出就可以了。在Windows上,无论如何都无法在控制台上输出Unicode输出(由于字体和破坏的控制台代码页)。

简而言之,没有理由想要这样的事情,你最好不要使用其中之一,而不是两者兼而有之。


0
投票

如果您正在以宽格式阅读文件并使用我从评论中选择的多字节程序,那么解决方案就可以了。 。 。

您可以将文件内容作为std::wstring读入程序存储器,并使用wcstombs_s()将从文件读取的字符串转换为多字节字符串。

从本质上讲,字符串的格式无关紧要,您可以随时随地更改字符串。

© www.soinside.com 2019 - 2024. All rights reserved.