嵌套枚举的前向声明

MM.*_*MM. 16 c++ enums nested forward-declaration

我有类似以下代码:

class B
{
}

class A
{
  enum {
     EOne,
     ETwo
  } EMyEnum;

  B myB;
}
Run Code Online (Sandbox Code Playgroud)

我想在类B中声明一个类型为EMyEnum的成员(在A之前声明).这可能吗?我意识到解决方案是将B类声明为秒,但为了清楚起见,我宁愿不这样做.

Mat*_* M. 11

这是不可能的......但它可以伪造继承滥用:)

namespace detail
{
  class A_EMyEnum
  {
  public:
    enum {
       EOne,
       ETwo
    } EMyEnum;

  protected:
    A_EMyEnum() {}
    A_EMyEnum(const A_EMyEnum&) {}
    A_EMyEnum& operator=(const A_EMyEnum&) { return *this; }
    ~A_EMyEnum() {}
  }; // class A_EMyEnum
} // namespace detail

class B { // use detail::A_EMyEnum };

class A: public detail::A_EMyEnum
{

  B mB;
};
Run Code Online (Sandbox Code Playgroud)

另一方面......你为什么不简单地向前宣布B?

class B;

class A
{
public:
  enum EMyEnum {};

  A();
  A(const A&);
  A& operator=(const A&);
  ~A();
  void swap(A&);

private:
  B* mB;
};

class B { // use A::EMyEnum };
Run Code Online (Sandbox Code Playgroud)

当然你需要实际编写A的所有通常的"默认生成"方法,但是嘿,这不会花费太多!