方法将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