是否有一种很好的方法来实现对抽象类的多重继承,这些抽象类又从同一基类继承?

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

在旧项目中,有一些IPC机制需要Serializable接口实现。

有人创建了需要TxtSerializable实现的新IPC机制。

现在,必须创建新的IPC机制来发送和接收CsvSerializable对象。

什么是使该对象可序列化为多种格式而不破坏原有代码的一种优雅方法?我的意思是,不破坏期望Serializable对象的IPC。

这里是一个抽象示例,代表实现代码的方式:

#include <string>
#include <iostream>

class Serializable {
public:
    virtual std::string Serialize() = 0;
};

class TxtSerializable : public Serializable {
public:
    virtual std::string TxtSerialize() = 0;
};

class CsvSerializable : public Serializable {
public:
    virtual std::string CsvSerialize() = 0;
};

class MyClass : public TxtSerializable, CsvSerializable {
public:
    std::string Serialize() override {
        return CsvSerialize();
    }

    std::string TxtSerialize() override {
        // Convert to an arbitrary text string
        return "TXT";
    }

    std::string CsvSerialize() override {
        // Convert to a CSV string
        return "CSV";
    }
};

void SomeIpcFunction(const Serializable* serialize) {
    // Do something
}

int main(int argc, char *argv[]) {
    MyClass my_class;
    SomeIpcFunction(&my_class); // ambiguous conversion from derived class to base class
    return 0;
}

c++ code-design
1个回答
0
投票

是的,存在所谓的“钻石问题”,可以通过虚拟继承来解决。参见https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem

在您的情况下,您要从public virtual继承Serializable

© www.soinside.com 2019 - 2024. All rights reserved.