我正在尝试制作一个类似于 的 C++ 类 std::ostream
,它将接受其输入并写入std::ostream
构造函数中给定的两个 s。这是与适当的operator<<
模板一起:
struct SplitStream
{
SplitStream(std::ostream & a_, std::ostream & b_) : a(a_), b(b_) {}
std::ostream & a, & b;
};
template<class T>
const SplitStream & operator << (const SplitStream & sp, const T & x)
{
sp.a << x;
sp.b << x;
return sp;
}
该代码下面的几行,我尝试使用这个类:
void foo(SplitStream & out)
{
double some_double = 1.23;
out << "bar" << some_double << std::endl;
}
我得到了这个相当神秘的错误:
... error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'const SplitStream' (or there is no acceptable conversion) ...
我究竟做错了什么?我试图在operator<<
没有 const 的情况下进行定义,但它也没有编译。