我想重载 <<
操作符,为以下类型生成一个二进制文件和一个文本文件。
class data
{
public :
int a;
char b;
}
我怎样才能重载 <<
操作符为这个类类型生成一个二进制文件和一个文本文件,像这样。
ostream& operator(ostream &out, data &d) //for text
{
out<<d.a<<' '<<d.b<<'\n';
return out;
}
and
ostream& operator<<(ostream &out, data &d) //for binary
{
// code to serialize class data to store it in binary
return out;
}
问题是我不能传递两个不同的流(像这样)。ostream& operator<<(ostream& out1, ostream& out2, data& d)
)至 <<
同时因为原型或方式的关系 <<
操作符的定义,其中只需要一个 ostream
作为 parameter
.此外,由于我只能将一个流传给 <<
操作员,我将无法链上。<<
在C++中,我想重载<<运算符,同时生成文本和二进制文件。
而不是定义一个 operator<<
对于 data
,创建2个包装器来代表你想要的2种格式,然后定义了 operator<<
来代替。
class data
{
public:
int a;
char b;
};
struct asText
{
const data &m_data;
asText(const data &d) : m_data(d) {}
};
struct asBinary
{
const data &m_data;
asBinary(const data &d) : m_data(d) {}
};
ostream& operator(ostream &out, const asText &d)
{
out << d.m_data.a << ' ' << d.m_data.b << '\n';
return out;
}
ostream& operator<<(ostream &out, const asBinary &d)
{
// code to serialize d.m_data to store it in binary
return out;
}
然后您可以决定在调用 operator<<
按每次通话计算,例如:
data d;
...
stream1 << asText(d)
...
stream2 << asBinary(d)