gpt4 book ai didi

c++ - 枚举类不明确继承

转载 作者:行者123 更新时间:2023-11-30 01:46:56 35 4
gpt4 key购买 nike

当我使用应该是强类型枚举的东西时,我真的在为继承问题而苦苦挣扎——然而,当通过继承使用时,枚举似乎是模棱两可的。

我正在使用 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);
}

我找不到任何信息为什么它不应该以这种方式工作。我是否遗漏了一些明显的东西。

最佳答案

函数必须在相同的范围内,重载解析才能起作用。您需要自己将它们带到一个共同的范围内:

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);

关于c++ - 枚举类不明确继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372707/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com