我有enum课,说
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
};
但它没有编译,因为Enum的类型不完整 我不能在课后宣布它,因为它在标题中,所以它不适用于多个cpp。此外,在这里拥有公共构造函数并不是一个好主意。
有什么想法吗?
答案 0 :(得分:1)
解决方案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);
}
您可以看到a live example here。唯一的缺点是您不能使用类的名称作为命名空间。
答案 1 :(得分:0)
你可以写一个这样的课:
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;