c++ - 前向声明类枚举问题的解决方法?

标签 c++ enums pimpl-idiom

我正在维护一个大型代码库,并结合使用前向声明和 pImpl 习惯用法来缩短编译时间并减少依赖性(而且效果非常好,)

我遇到的问题是包含公共(public)枚举的类。这些枚举不能向前声明,所以我别无选择,只能包含类头。例如:

// Foo.h

class Foo
{
public:
  enum Type
  {
    TYPE_A,
    TYPE_B,
  };
  ...
};

// Bar.h

#include "Foo.h" // For Foo::Type

class Bar
{
public:
  void someFunction(Foo::Type type);
  ...
};

所以,我正在寻找避免这种情况的方法,只能想到以下几点:

将类枚举移动到单独的“类型”命名空间

// FooTypes.h

namespace FooTypes
{
  enum Type
  {
    TYPE_A,
    TYPE_B,
  };
}

// Bar.h

#include "FooTypes.h"

class Bar
{
public:
  void someFunction(FooTypes::Type type);
  ...
};

使用 int 而不是枚举

// Bar.h

class Bar
{
public:
  void someFunction(int type);
  ...
};

我错过了什么?其他人如何绕过此限制(无法转发声明枚举。)

最佳答案

将枚举放入包含 PIMPL 的类中。

关于c++ - 前向声明类枚举问题的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1861837/

相关文章:

c++ - 在通过在 main 中声明数组来解决之前,数组绑定(bind)不是整数常量

python - 用嵌套枚举包装结构 - vector 模板中的引用

c++ - 向库用户隐藏库依赖项

c++ - 适用于嵌入式 Windows 的 Silverlight

c++ - 控制语句错误的风格

java - 如何访问Java中枚举中的内部类

编译/运行时的 Java 枚举评估

c++ - 为什么 "error: invalid application of ' sizeof' 为使用 unique_ptr 的不完整类型”通过添加空析构函数来修复?

c++ - C/C++ API设计困境

c++ - 如何测试 std::random_device 的随机性?