为什么使用用户定义的类进行流操作的典型标头C通常如下所示:
std::ostream& operator<<(std::ostream& os, const C& c);
std::istream& operator>>(std::istream& is, C&);
Run Code Online (Sandbox Code Playgroud)
而不是这样的:
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);
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么流运算符的通常重载是用 完成的,它是ofstd::ostream的 typedef ,为什么不直接用 完成?charstd::basic_ostreamstd::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
}
Run Code Online (Sandbox Code Playgroud)
这里写operator<< …