0

私はユーザー定義のクラスを持っていますMyClass. その定義が次のようになっているとします。

class MyClass
{
    int a;
    int *b;
    Base *c;
};

私が持っている場所

class Base
{
    int base_data;
    public:
        Base(int) { //implementation }
        virtual void some_func() = 0;
}

class Derived1 : public Base
{
    int derived_1;
    public:
        Derived1(int) { //implementation }
        virtual void some_func() { //implementation }
}

class Derived2 : public Base
{
    int derived_2;
    public:
        Derived2(int) { //implementation }
        virtual void some_func() { //implementation }
}

このクラスのオブジェクトを に送信したいと思いますQTcpsocketこの回答に従って、私はを使用でき、このQDataStreamの助けを借りて、次のように実装しました。

friend QDataStream& operator<<(QDataStream&, const MyClass&);
friend QDataStream& operator>>(QDataStream&, MyClass&);

クラス宣言で、次のように定義することを検討しています。

QDataStream& operator<<(QDataStream &stream, const MyClass &obj)
{
    stream << obj.a;
    stream << obj.(*b);
    stream << obj.(*Base); // assume QDataStream has been overloaded for Base already
}

データを送信する必要があるため、ポインターを逆参照して、ポインターが指すデータを送信しています。

これはこれを行う正しい方法ですか?

この方法で送信すると、受信側でオブジェクトを再作成する方法がわかりません。私は考えています:

QDataStream& operator<<(QDataStream &stream, MyClass &obj)
{
    stream >> obj.a;
    b = new int;
    stream >> obj.(*b);
    Base = new //what?
    stream >> obj.(*Base); // assume QDataStream has been overloaded for Base already
}

intポインターの場合、 を作成して、new int着信値をそれに割り当てることができます。しかし、 型のポインターはBaseどうでしょうか? Derived1タイプかどうかはわかりませんDerived2

どうすればこれを処理できますか?

ここに解決策がない場合、クラスオブジェクトを送信する他の方法はありますか?

ありがとうございました。

4

0 に答える 0