更新3:

没关系。我有点想要的东西。下面给出了类内的唯一标识符。

static const int _counter_start = __COUNTER__;
static const int val1 = __COUNTER__ - _counter_start;
static const int val2 = __COUNTER__ - _counter_start;


更新2:

Boost Preprocessor

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

class a
{
...
    MAP_BEGIN()
    MAP_DECL...
    MAP_END()
...
};


事实是,对于每个MAP_DECL,我需要在2个地方扩展宏。

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


Boost预处理器应该(理论上)允许我将MAP_DECL累积为一个序列,最后将其扩展为func()(同时扩展我们的类字段)。



更新1:

我现在正在使用Boost Preprocessor库。当前,每次需要向序列中添加某些内容时,我都会像下面这样创建新的宏变量/定义。

我正在尝试扩展Boost预处理程序序列,此刻我仍然坚持这样做

#define SEQ (w)(x)(y)(z)
#define SEQ2 BOOST_PP_SEQ_PUSH_BACK(SEQ, a)




原版的:

假设我有以下代码

#define CUR 2
#define CUR CUR + 2


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

最佳答案

简而言之,你不能。

在扩展CUR时(在第二个#define之后),预处理器将用CUR + 2替换一个CUR实例,并将名称“ CUR”涂成蓝色(不再进一步扩展)。此后,C编译器将看到CUR + 2,这很可能会产生编译错误。

关于c++ - 强制预处理器在重新定义中使用先前的定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1384946/

10-13 08:18