有一个第三方库定义了一个Stream
带有模板运算符重载的类<<
class Stream {
private:
std::ostringstream _buffer;
public:
template<typename T>
Stream& operator<<(const T& t) {
_buffer << t;
return *this;
}
}
现在我想定义一个规则,用于将此类的对象写入我的类程序中的流。但是由于 Stream
不是后继者ostream
,我想写入任何流,然后在我的程序中定义一个模板函数
template <typename T>
T & operator<<(T & strm, const CMyClass & val) {
.......... // Запись полей объекта
return strm;
}
但是现在当调用
Stream strm;
CMyClass obj;
strm << obj;
我在 IDE 中收到警告
重载运算符 '<<' 的使用不明确(操作数类型为 'Stream' 和 'CMyClass')
候选函数 [with T = CMyClass]
候选函数 [with T = Stream]
编译时出错
Stream.hh(112): error C2679: binary '<<': no operator found which采用'const T'类型的右手操作数(或没有可接受的转换)与[T=CMyClass]
那些。我的覆盖被忽略
问题:除了为每个流编写两个重载之外,还有什么方法可以解决这个问题?
Stream & operator<<(Stream & strm, const CMyClass & val);
std::ostream & operator<<(std::ostream & strm, const CMyClass & val);
这样做了
编译