小编Thé*_*lst的帖子

使用 basic_ostream 重载运算符 <<

为什么使用用户定义的类进行流操作的典型标头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<< …

c++ templates operator-overloading std stream-operators

4
推荐指数
1
解决办法
1488
查看次数