宏体中的#define

时间:2013-02-01 15:07:33

标签: c++ macros c-preprocessor

我有以下用例

#define ConstantDouble( T )\
 T( Alert, c_alert )

 // I want to generate #define macro's dynamically
#define T( x, y ) #define #x y   <-- Error
ConstantDouble( T )
#undef T 

#define Constant( x ) Constants::x ;   <-- x is Alert and I want the prev #define to     kick in and convert this to c_alert

// Want to generate members variables directly 
class Constants
{
    #define T( x, y ) static double y;
    ConstantDouble( T )
    #undef T
};

这有解决方法吗?

我希望在我的名字中有这样的东西

Constant( "Alert" )转换为Constants::c_alert;

1 个答案:

答案 0 :(得分:0)

不,没有解决方法。只有一个预处理器传递。

如评论中所述,C ++模板要容易得多。它们由真正的编译器编译,它支持更复杂的语法,可以进行数学运算,并且可以进行255级嵌套。