Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以定义一个可以像enum那样初始化的类?_C++_Class_Enums - Fatal编程技术网

C++ 有没有一种方法可以定义一个可以像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++中类的定义吗?如果是的话,请你解释一下这个方法以及它是如何工作的?如果不是,那么我可能会使用可变模板来实现 编辑 如果我按照

有没有一种方法可以定义一个可以像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++中类的定义吗?如果是的话,请你解释一下这个方法以及它是如何工作的?如果不是,那么我可能会使用可变模板来实现

编辑

如果我按照自己的喜好制作了一个类,那么下面的代码就可以了:

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
。我想知道我是否可以改进一下e
enum
创建一个
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进行此操作。有关详细信息,请参阅此答案: