强制预处理器在重定义中使用先前的定义

jam*_*o00 0 c++ g++ c-preprocessor boost-preprocessor

更新3:

没关系.我有点得到我想要的东西.以下内容给出了类中的唯一标识符.

static const int _counter_start = __COUNTER__;
static const int val1 = __COUNTER__ - _counter_start;
static const int val2 = __COUNTER__ - _counter_start;
Run Code Online (Sandbox Code Playgroud)

更新2:

提升预处理器

我将使用此功能实现类似于消息映射的内容.

class a
{
...
    MAP_BEGIN()
    MAP_DECL...
    MAP_END()
...
};
Run Code Online (Sandbox Code Playgroud)

问题是,对于每个MAP_DECL,我需要在两个地方扩展宏.

class a
{    
    virtual void func()
    {        
        ...
        //does something with the decl declaration        
    }
    ...
    //also expand some stuff here    
}
Run Code Online (Sandbox Code Playgroud)

Boost预处理器应该(理论上)允许我将MAP_DECL累积到一个序列中并在最后将它扩展为func()(同时在我们去的同时扩展类字段).


更新1:

我目前正在使用Boost预处理器库.我每次需要在序列中添加一些内容时,我目前无法创建一个新的宏变量/定义,如下所示.

我正在尝试扩展Boost预处理器序列,而我现在仍然坚持这样做

#define SEQ (w)(x)(y)(z) 
#define SEQ2 BOOST_PP_SEQ_PUSH_BACK(SEQ, a)
Run Code Online (Sandbox Code Playgroud)

原文:

假设我有以下代码

#define CUR 2
#define CUR CUR + 2
Run Code Online (Sandbox Code Playgroud)

如何强制第二行使用第一行的CUR值?

Jon*_*ler 5

简而言之,你做不到.

当CUR展开时(在第二个之后#define),预处理器将用CUR + 2替换CUR的实例,并且'blue paint'将名称CUR替换(不再扩展它).此后,C编译器看到CUR + 2,这很可能产生编译错误.