如何通过QDataStream发送类的指针成员?

时间:2017-02-27 13:29:48

标签: c++ qt pointers inheritance qdatastream

我有一个用户定义的类,比如import requests import json headers = { 'User-Agent': 'Mozilla/5.0', 'X-Api-Key':'adf51226795afbc4e7575ccc124face7', } res = requests.get('https://api2.drive-now.com/cities/4604?expand=full', headers=headers, allow_redirects=False) print(res.status_code, res.reason) json_obj = json.loads(res.content) print(json_obj) 。假设其定义如下:

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 } } 。根据{{​​3}},我可以使用QTcpsocket,并且在this answer的帮助下,我实施如下:

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

我该如何处理?

如果这里没有解决方案,还有其他方式发送类对象吗?

谢谢。

0 个答案:

没有答案