繁体   English   中英

C ++:等同于“使用名称空间” <namespace> ”但是上课吗?

[英]C++: Equivalent to “using namespace <namespace>” but for classes?

假设您有一个其中定义了枚举的类:

class MyClass {
  typedef enum _MyEnum{ a } MyEnum;
}

有没有一种方法可以从另一个类访问值a而不必将其称为MyClass :: a? 如果枚举包含在名称空间而不是类中,则不是“使用名称空间”; 解决了问题-是否有等效的方法可以对类进行处理?

我敢肯定,您会陷入“ MyClass :: a”的困境。 另外...这样做不会破坏将枚举放在类中的目的吗?

您能做的最好的事情就是将单个符号拖入类中。

class SomeClass {
    typedef MyClass::MyEnum MyEnum;
    MyEnum value;
};

请注意,如果typedef在类的公共部分中,则任何人都可以将SomeClass::MyEnumMyClass::MyEnum的同义词。

一种替代方法是从Enum-holder类公开地派生:

struct Holder {
    enum MyEnum { a };
};

class User : public Holder {
public:
    // a now visible in class
    MyEnum f() { return a; } 
};

// a visible outside too
User::MyEnum f() { return User::a; }

除非另一个类是MyClass的派生类(并且您的枚举是受保护的/公共的),否。 我知道这不是一个答案,但是我认为该枚举是在MyClass内定义的,这是有原因的,因此请不要尝试使其全局可用。

您可以按如下方式分别提取每个常量:

class MyClass {
  public:
  // I added a value here intentionally to show you what to do with more than one enum value
  typedef enum _MyEnum{ a, b } MyEnum;
}
using MyClass::a;
using MyClass::b;
//... likewise for other values of the enum

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM