首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >嵌套枚举的前向声明的问题

嵌套枚举的前向声明的问题
EN

Stack Overflow用户
提问于 2018-05-02 05:11:06
回答 2查看 0关注 0票数 0

我有类似于以下代码的代码:

代码语言:txt
复制
class B
{
}

class A
{
  enum {
     EOne,
     ETwo
  } EMyEnum;

  B myB;
}

我想在B类(在A之前声明)声明EMyEnum类型的成员。这可能吗?

EN

回答 2

Stack Overflow用户

发布于 2018-05-02 13:44:40

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

代码语言:txt
复制
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;
};

另一方面...你为什么不直接转发B呢?

代码语言:txt
复制
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 };

当然,你确实需要编写A的所有正常的“默认生成”方法,但是这并不需要太多的代价!

票数 0
EN

Stack Overflow用户

发布于 2018-05-02 15:04:36

当前的C++标准不允许enum,虽然他们将在即将到来的C++0x标准中出现。

这里了解更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档