C++ 有没有一种方法可以定义一个可以像enum那样初始化的类?
有没有一种方法可以定义一个可以像enum那样初始化的类 例如:C++ 有没有一种方法可以定义一个可以像enum那样初始化的类?,c++,class,enums,C++,Class,Enums,有没有一种方法可以定义一个可以像enum那样初始化的类 例如: class TYPE; TYPE _type { a, b, c, }; _type::a; TYPE::TYPENAME tn = _type::c; // or such similar things _type.get_size(); // the example returns 3 这是C++中类的定义吗?如果是的话,请你解释一下这个方法以及它是如何工作的?如果不是,那么我可能会使用可变模板来实现 编辑 如果我按照
class TYPE;
TYPE _type {
a,
b,
c,
};
_type::a;
TYPE::TYPENAME tn = _type::c; // or such similar things
_type.get_size(); // the example returns 3
这是C++中类的定义吗?如果是的话,请你解释一下这个方法以及它是如何工作的?如果不是,那么我可能会使用可变模板来实现
编辑 如果我按照自己的喜好制作了一个类,那么下面的代码就可以了: main.cpp#include <iostream>
#include "advanced_enum_class_name_TYPE.h"
TYPE type { a, b, c }; // a, b, c have not been defined before this line
int main() {
type _type = type::a;
std::cout << type.get_size() << std::endl; // 3
if(_type == type::b) { // false
std::cout << "it is b!" << std::endl;
}
else {
std::cout << "it is not b!" << std::endl;
}
}
#包括
#包括“高级枚举类名称类型.h”
类型{a,b,c};//a、 在此行之前未定义b、c
int main(){
类型_type=type::a;
std::看不懂工厂设计模式,在我看来,这可能是最接近的答案。你的代码片段不连贯,类型和表达式混合在一起。没有这样的语法,我也不理解你的用例。@路人我把可能令人讨厌的一个改成了:typename
。我想知道我是否可以改进一下eenum
创建一个class
,语法上没有太大的变化。如果我实现TYPE
,这个代码会失败吗?TYPE\u TYPE{a,b,c}
看起来像是一个简单的构造/初始化。当然,它是可以完成的-定义一个合适的构造函数。不过,您确实声明了类类型
之前?这对于使用它进行实例是必要的。(类似于公开代码中的正向声明不足以做到这一点。)BTW.在C++中水平或垂直地编写代码是无关的。C++具有无格式的语法,即可以插入任意数量的空格之间的“空间”和“新行”,而不改变含义。(当然,预处理器指令是一个例外。)您可以使用Boost.Enum进行此操作。有关详细信息,请参阅此答案:阅读factory design pattern,这可能是我认为最接近的答案。您的代码片段不连贯,类型和表达式混合在一起。没有这样的语法,我不理解您的用例。@Password我将可能令人讨厌的一个更改为:typename
e> TYPENAME
。我想知道我是否可以通过创建一个类来改进enum
,而不需要在语法上做太大的更改。尽管我实现了TYPE
,但这段代码会失败吗?类型{a,b,c}
看起来像是一个简单的构造/初始化。当然,它是可以完成的-定义一个合适的构造函数。不过,您确实声明了类类型
之前?这对于使用它进行实例是必要的。(类似于公开代码中的正向声明不足以做到这一点。)BTW.在C++中水平或垂直地编写代码是无关的。C++具有无格式的语法,即可以插入任意数量的空格之间的“空间”和“新行”,而不改变含义。(当然,预处理器指令是一个例外。)您可以使用Boost.Enum进行此操作。有关详细信息,请参阅此答案: