为什么我自己的输出流类不起作用

Why does my own output stream class not work?

本文关键字:不起作用 输出流 自己的 我自己 为什么      更新时间:2023-10-16

可能重复:
std::endl在重载运算符<时为未知类型<

#include <iostream>
using namespace std;
struct OutputStream
{
    template<class T>
    OutputStream& operator <<(const T& obj)
    {
        cout << obj;
        return *this;
    }
};
OutputStream os;
int main()
{    
    os << 3.14159 << endl; // Compilation Failure!
}

VC++2012编译器抱怨:

错误C2676:二进制'<lt;':'OutputStream"未定义此运算符或转换为预定义运算符可接受的类型

原因是编译器无法推导出T的类型,因为std::endl是定义为的函数模板

template <class charT, class traits>
  basic_ostream<charT,traits>& endl ( basic_ostream<charT,traits>& os );

在IOStreams中克服它的方法是提供适当的operator<<:过载

OutputStream& operator <<(std::ostream& ( *pf )(std::ostream&))
{
  cout << pf;
  return *this;
}