【问题标题】:#define in macro body#define 在宏体中
【发布时间】:2013-02-01 15:07:33
【问题描述】:

我有以下用例

#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;

【问题讨论】:

  • 这不是 C,而是 C++!您可以使用各种预处理器技巧在 C 中执行类似的操作(查找“xmacros”),但既然您使用的是 C++,为什么不直接使用模板呢?
  • 你能举个模板的例子吗?
  • 我也许可以,但首先我需要你解释一下整个构造的目的是什么。为什么要写Constant("Alert"),得到c_alert?

标签: c++ macros c-preprocessor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多