为什么带有用户定义类的流操作的典型标头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);
我的问题是为什么流运算符的通常重载是用 来完成的,它是ofstd::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<<
写的限制我们只能使用专门用于char
( std::ostream
, std::ostringstream
, ...) 的流对象。因此,如果 usingstd::ostream
比 更受限制std::basic_ostream
,为什么std::basic_ostream
在谈论流运算符重载时从未提及?