枚举类模糊继承

时间:2015-09-03 10:07:12

标签: c++ c++11 inheritance overloading enum-class

当使用应该是强类型枚举的时候,我真的很难接受继承问题 - 但是当通过继承使用时,枚举似乎是不确定的。

我正在使用g ++(GCC)4.7.2

enum class AE { V1 };
enum class BE { V2 };
enum class CE { V3 };

struct A { void set(AE enumval) { } };
struct B { void set(BE enumval) { } };
struct C { void set(CE enumval) { } };
struct combined : A, B, C { };

struct all_in_one {
    void set(AE enumval) { }
    void set(BE enumval) { }
    void set(CE enumval) { }
};

void function()
{
    combined inherited_obj;

    // compile errors - ambigious funtion call
    inherited_obj.set(AE::V1);
    inherited_obj.set(BE::V2);
    inherited_obj.set(CE::V3);


    all_in_one simple_obj;

    // works like a charm...
    simple_obj.set(AE::V1);
    simple_obj.set(BE::V2);
    simple_obj.set(CE::V3);
}

我无法找到任何信息,为什么它不应该以这种方式工作。我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:4)

这些函数必须在相同的范围内才能使重载分辨率起作用。您需要自己将它们带到一个共同范围:

struct combined : A, B, C
{
    using A::set;
    using B::set;
    using C::set;
};

DEMO

或明确指定范围:

inherited_obj.A::set(AE::V1);
inherited_obj.B::set(BE::V2);
inherited_obj.C::set(CE::V3);