我是否可以重载一个类的<<操作符,在C++中生成一个文本和二进制文件,同时可以连锁<<操作?

问题描述 投票:0回答:1

我想重载 << 操作符,为以下类型生成一个二进制文件和一个文本文件。

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++中,我想重载<<运算符,同时生成文本和二进制文件。

c++ overloading
1个回答
2
投票

而不是定义一个 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)
© www.soinside.com 2019 - 2024. All rights reserved.