私はtypedef char char_t
これもあり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 を使用する可能性が最も高いため、UTF-8 文字列をstd::cout
出力に使用しても問題ありません。Windows では、コンソールでの Unicode 出力を正しく表示することはできません (フォントとコンソールのコードページが壊れているため)。
要するに、そのようなことが必要な理由はありません。両方ではなく、どちらか一方を使用する方がよいでしょう。
于 2012-08-15T09:44:36.297 に答える