扩展的枚举类
Extended enum class
我有枚举类,说
enum class Enum{
var1, var2;
}
现在,我想添加一些取决于参数即var3(int)
的成员。好的,这不是为了枚举,所以我想按常规类更改它,但是我的目标是将旧代码(Enum::var1
作为类型Enum
的值)进行编译。
我试图这样做(让我们暂时忘记var3
,它将是静态功能):
class Enum{
public:
const static Enum var1 = Enum(1);
const static Enum var2 = Enum(2);
private:
Enum(int v):v(v){
}
int v;
//operator == using v
};
但由于枚举的类型不完整而没有编译。
我无法在上课后声明它,因为它在标题中,因此它不能与多个CPP一起使用。此外,在这里拥有公共构造函数并不是一个好主意。
有什么想法?
解决方案1:
对于静态变量问题:在类声明中声明您的静态变量:
class Enum
{
public:
static const Enum var1;
static const Enum var2;
Enum(int v):v(v)
{
}
private:
int v;
//operator == using v
};
然后,为此类创建一个 Enum.cpp
的源文件,包含:
#include "Enum.h"
const Enum Enum::var1 = Enum(1);
const Enum Enum::var2 = Enum(2);
解决方案2:
如果您希望它是仅标题,则可以使用静态变量而不是类变量:
class Enum
{
public:
Enum(int v):v(v)
{
}
private:
int v;
};
namespace Enumeration // It is not possible to name it 'Enum'
{
// static => local to translation unit. No linking conflict
static const Enum var1 = Enum(1);
static const Enum var2 = Enum(2);
}
您可以在这里看到一个现场示例。唯一的缺点是您不能将类的名称用于名称空间。
您可以写这样的类:
class Enum
{
public
enum NestedEnum : int
{
var1, var2
};
static NestedEnum var3;
Enum(NestedEnum value) : value(value) { }
operator NestedEnum() const { return value; }
private:
NestedEnum value;
};
以及您可以声明的任何地方:
Enum::var3 = (Enum::NestedEnum)someIntegerVariable;
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 扩展 std::to_string 以支持枚举和指针
- 警告 C4481 枚举中使用的非标准扩展名'MyEnum'限定名称中使用
- 扩展的枚举类
- 读取协议缓冲区中枚举扩展的值
- 扩展枚举
- 关于在c++中扩展枚举
- 扩展枚举定义
- 扩展枚举类型
- 扩展枚举