gpt4 book ai didi

c++ - 强制预处理器在重新定义中使用以前的定义

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:35 24 4
gpt4 key购买 nike

更新 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 预处理器库。每次我需要向序列中添加一些内容时,我目前都无法像下面这样创建一个新的宏变量/定义。

我正在尝试扩展 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com