具有前向声明的枚举类底层类型

时间:2018-01-24 13:24:37

标签: c++ enums

我有一个小的枚举类,我想在几个地方转发声明。有没有办法将基类型与前向声明分离?我担心稍后会有人改变类型。

例如我有枚举

onLocationChange()

前瞻声明将是:

enum class e_mode : bool
{
     SYNC,
     ASYNC
};

如果有人添加了另一个值,他需要将bool更改为char,然后绕过更改前向声明。我想避免这样......

2 个答案:

答案 0 :(得分:6)

enum的基础类型可以通过typedef预先定义:

typedef bool e_mode_base_t;

然后,您可以将此类型用于enum的前向声明:

enum class e_mode: e_mode_base_t;

以及enum的定义:

enum class e_mode : e_mode_base_t
{
     SYNC,
     ASYNC
};

这样,当您希望更改e_mode_base_t的基础类型时,您只需要修改enum的定义。

您也可以通过using代替typedef来创建类型别名:

using e_mode_base_t = bool;

可能更具可读性。

答案 1 :(得分:0)

你可以有一个“.h”文件,它只定义枚举的前向声明。在向前声明枚举的情况下,然后包含这个“廉价”的h文件。