方法将ctype宏转换为c++;常数 我有一个C++库,它定义了如下宏,
/*这是定义的结果头文件*/方法将ctype宏转换为c++;常数 我有一个C++库,它定义了如下宏,,c++,enums,namespaces,C++,Enums,Namespaces,/*这是定义的结果头文件*/ #define RESULT_ENUM( prefix, name, value ) prefix ## name = (value) #define STATE_RESULT_LIST( prefix ) \ RESULT_ENUM( prefix, SUCCESS, 0 ), \ RESULT_ENUM( prefix, PENDING, 1 ), #define
#define RESULT_ENUM( prefix, name, value ) prefix ## name = (value)
#define STATE_RESULT_LIST( prefix ) \
RESULT_ENUM( prefix, SUCCESS, 0 ), \
RESULT_ENUM( prefix, PENDING, 1 ),
#define COMMON_RESULT_LIST( prefix ) \
RESULT_ENUM( prefix, SUCCESS, 0 ), \
RESULT_ENUM( prefix, PENDING, 1 ),
typedef enum
{
STATE_RESULT_LIST ( STATE_ )
COMMON_RESULT_LIST ( CHANNEL_ )
}domain_result;
这就是它的用途
int main(int argc, char** argv) {
domain_result res = CHANNEL_SUCCESS;
cout<<STATE_SUCCESS <<endl;
cout<<CHANNEL_PENDING<<endl;
return 0;
}
int main(int argc,char**argv){
域\u结果res=通道\u成功;
cout您可以使用g++-E
来了解domain\u result
最终是如何定义的
事实证明,所有这些都可以用以下方式代替:
enum domain_result
{
STATE_SUCCESS = 0,
STATE_PENDING = 1,
CHANNEL_SUCCESS = 0,
CHANNEL_PENDING = 1,
};
如果需要让enum
的所有标记都具有唯一值,可以将其简化为:
enum domain_result
{
STATE_SUCCESS, // = 0 by default.
STATE_PENDING,
CHANNEL_SUCCESS,
CHANNEL_PENDING,
};
您可以使用g++-E
了解domain\u result
最终是如何定义的
事实证明,所有这些都可以用以下方式代替:
enum domain_result
{
STATE_SUCCESS = 0,
STATE_PENDING = 1,
CHANNEL_SUCCESS = 0,
CHANNEL_PENDING = 1,
};
如果需要让enum
的所有标记都具有唯一值,可以将其简化为:
enum domain_result
{
STATE_SUCCESS, // = 0 by default.
STATE_PENDING,
CHANNEL_SUCCESS,
CHANNEL_PENDING,
};
备选案文1:
enum domain_result : uint8_t
{
STATE_SUCCESS = 0,
STATE_PENDING = 1,
CHANNEL_SUCCESS = 0,
CHANNEL_PENDING = 1,
};
备选案文2:
const uint8_t STATE_SUCCESS = 0;
const uint8_t STATE_PENDING = 1;
const uint8_t CHANNEL_SUCCESS = 0;
const uint8_t CHANNEL_PENDING = 1;
备选案文1:
enum domain_result : uint8_t
{
STATE_SUCCESS = 0,
STATE_PENDING = 1,
CHANNEL_SUCCESS = 0,
CHANNEL_PENDING = 1,
};
备选案文2:
const uint8_t STATE_SUCCESS = 0;
const uint8_t STATE_PENDING = 1;
const uint8_t CHANNEL_SUCCESS = 0;
const uint8_t CHANNEL_PENDING = 1;
有更好的方法吗?比如快速定义两个枚举并将它们合并为一个,比如在单独的枚举中定义状态和通道,然后将它们合并到域中。\u result..@user3607698,我不确定什么可以称为“更好”。除非您处理大量此类enum
s(我将大量限定为10个或更多)Typedef,我不认为值得你担心。这是C++,不是CIS有更好的方法吗?比如把两个枚举定义为一个,并将它们合并在一个状态,比如在独立的枚举中的状态和通道,然后将它们合并到DimaNi结果中。除非你正在处理很多这样的代码< EnUM>代码> s(我将有10个或更多的资格),我认为你不值得担心它。Typedef的EnUM?这是C++,不是C