首页 > 解决方案 > 如何多次继承同一个类?

问题描述

是否可以像这样继承两个相同的类?我能够在 msvc 上编译它,但无法在 g++/clang++ 上编译。我收到错误:

Source.cpp:14:12: warning: direct base 'a' is inaccessible due to ambiguity:
    struct b -> struct a
    struct b -> class_combiner<struct a> -> struct a [-Winaccessible-base]
struct b : public a, public class_combiner<a> {
           ^~~~~~~~
Source.cpp:17:12: error: ambiguous conversion from derived class 'b' to base class 'a':
    struct b -> struct a
    struct b -> class_combiner<struct a> -> struct a
        a::f();

资源:

template <typename T>
struct class_combiner : public T {

    using T::T;

};

struct a {

    void f() {}

};

struct b : public a, public class_combiner<a> {

    void f2() {
        a::f();
        b::class_combiner::f();
    }

};


int main() {
    b x;
    x.f2();
}

标签: c++inheritance

解决方案


我想出了可行的快速修复:

template <typename T, unsigned int instance>
struct class_combiner : public T {

    using T::T;

};

struct a {

    void f() {}

};

struct b : public class_combiner<a, 0>, public class_combiner<a, 1> {

    void f2() {
        class_combiner<a, 0>::f();
        class_combiner<a, 1>::f();
    }

};


int main() {
    b x;
    x.f2();
}

推荐阅读