3

私はtypedef char char_tこれもありtypedef wchar_t char_t、私が欲しいのはジェネリックcoutです。
私は必要な名前util空間を持ってutil::coutいます。std::coutchar_tcharstd::wcoutchar_twchar_t

4

3 に答える 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 を使用する可能性が最も高いため、UTF-8 文字列をstd::cout出力に使用しても問題ありません。Windows では、コンソールでの Unicode 出力を正しく表示することはできません (フォントとコンソールのコードページが壊れているため)。

要するに、そのようなことが必要な理由はありません。両方ではなく、どちらか一方を使用する方がよいでしょう。

于 2012-08-15T09:44:36.297 に答える