使用没有classname::的其他类的enum

Use enum from other class without classname::

本文关键字:其他 enum classname      更新时间:2023-10-16

我在一些类A的公共部分有enum。我想在类B中使用这个enum。是否可以在不指定* a::enum_value*的情况下访问它?所以我可以用*enum_value*。

using A::enumname;

内部类B不编译

If you only need certain values, you can do:
struct B {
  static const A::enumname 
    enum_value1 = A::enum_value1,
    enum_value2 = A::enum_value2;  // etc.
};

如果可以修改A,则可以将枚举提取为A和B都可以使用的基类:

struct AEnum {
  enum enumname { enum_value1, enum_value2 };
};
struct A : AEnum {
};
struct B : BEnum {
};

没有好办法直接将所有enum值从一个地方导入到另一个地方。在这种情况下,我建议将A的枚举包装到一个嵌套类中,然后将类型定义为B。例如:

class A
{
public:
    struct UsefulEnumName
    {
        enum Type { BAR };
    };
};
class B
{
    typedef A::UsefulEnumName UsefulEnumName;
    UsefulEnumName::Type foo() const { return UsefulEnumName::BAR; }
};
相关文章: