ユーザー定義クラスを使用したストリーム操作の典型的なヘッダーが通常次C
のようなものである理由:
std::ostream& operator<<(std::ostream& os, const C& c);
std::istream& operator>>(std::istream& is, C&);
このようではありません:
template <class CharT, class Traits>
std::basic_ostream<CharT, Traits>& operator<<(
std::basic_ostream<CharT, Traits>& os
const C& c);
template <class CharT, class Traits>
std::basic_istream<CharT, Traits>& operator>>(
std::basic_istream<CharT, Traits>& is
C& c);
私の質問は、なぜストリーム演算子の通常のオーバーロードが ofのstd::ostream
typedef である で行われるのか、なぜ直接行われないのかということです。char
std::basic_ostream
std::basic_ostream
例えば:
class C
{
...
};
std::ostream& operator<<(std::ostream& os, const C& c)
{
...
}
int main()
{
C c;
std::wofstream myFile("myFile.txt");
myFile << c; //Impossible
}
ここに書かれていることは、 ( 、、 ...)にoperator<<
特化したストリーム オブジェクトのみを使用するように制限します。usingが よりも制限的である場合、ストリーム演算子のオーバーロードについて話すときになぜ言及されないのでしょうか?char
std::ostream
std::ostringstream
std::ostream
std::basic_ostream
std::basic_ostream