【问题标题】:Export part of the namespace of a class导出类的部分命名空间
【发布时间】:2011-04-24 22:12:32
【问题描述】:

我有一个包含enum 的课程:

class appearance{
  // ... stuff ...
  enum color {BLUE, RED, GREEN};
};

我想附加命名空间的一部分(带有using),以便我可以将BLUE 的值简单地称为BLUE,而不是appearance::BLUE。同时,我想将enum 保留在class{} 中,因为我认为这是最自然的。我尝试了namespaceusing 的各种组合,但无济于事。

有什么建议吗???

【问题讨论】:

  • 我遇到了类似的问题:将名称缩短为枚举。 long::path::to::enum 其中to 是包含枚举的类。由于我无法转发到自定义短标签命名空间,我决定从类to 子类化:class Mine : public To{ public: using long::path::to; private: Mine() {}; }; 如您所见,我禁止通过私有构造函数生成此类的实例,因此我现在可以在很多地方使用它更短的方式Mine::enum。无需类型转换等

标签: c++ enums namespaces using-statement


【解决方案1】:

我认为这是不可能的。 AFAIK,您可以按照here 的规定在另一个类或结构中使用using appearance::color

A 类中的 using 声明可以 命名以下之一:

  • A 基类的成员

  • 作为 A 基类成员的匿名联合成员

  • 作为 A 基类成员的枚举类型的枚举器

【讨论】:

    【解决方案2】:

    我认为你不能使用类范围的枚举来做到这一点。可能实现类似的唯一方法是将枚举包含在其自己不同的命名空间中,然后在需要的地方使用枚举。

    编辑:在这个问题How do you import an enum into a different namespace in C++? 中,我展示了一种将枚举从一个命名空间导入另一个命名空间的可能方法,但我不相信它对于此类案例会起作用(无论如何)。

    【讨论】:

      【解决方案3】:

      正如 Jacob 所说,您不能直接执行此操作,但您可以通过将枚举封装在它自己的命名空间中来使其工作。

      namespace enums{
              enum color
              {BLUE
              ,RED
              ,GREEN};
      } // namespace enums
      
      
      using namespace enums;
      class Foo
      {
          int Bar(){return BLUE;}
      }
      

      类似的东西应该可以工作......

      【讨论】:

      • OP 提到“我想将枚举保留在类中{}”。
      猜你喜欢
      • 2021-02-26
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多