gpt4 book ai didi

c++ - 在 C 宏中捕获名称

转载 作者:搜寻专家 更新时间:2023-10-31 01:11:01 25 4
gpt4 key购买 nike

下面的迭代器宏是给我的(不能改)

#define ITERATE(MACRO) \
MACRO(v1) \
MACRO(v2) \
MACRO(v3) \
MACRO(v4)

这背后的想法是,我现在可以定义自己的单参数宏并将其传递到迭代器中以展开 v1v2v3 v4。例如:

#define MYSTUFF(X) doSth(X);
ITERATE(MYSTUFF)

将扩展到

doSth(v1); doSth(v2); doSth(v3); doSth(v4);

我当前的问题是我想在另一个宏中调用 ITERATE,它想将一个额外的参数传递到 MYSTUFF 中,超出了 ITERATE< 提供的参数.

为了实现这一点,我希望我可以使用以下结构捕获额外的参数名称:

#define PARTIAL(T) FULL(UUU,T)
#define FULL(U,V) doSth(U,V)
#define START(UUU) ITERATE(PARTIAL)
START(bla)

我希望当 ITERATE(PARTIAL) 扩展为:

FULL(UUU,v1) FULL(UUU,v2) FULL(UUU,v3) FULL(UUU,v4)

我实际上会捕获 STARTUUU 参数,并将其替换为 bla。不幸的是,情况并非如此(至少在 gcc 中)。

  • 您知道这种名称捕获是否可以通过不同的方式实现吗?
  • 或者您可能有不同的想法如何解决将额外参数传递给 MACRO 的问题?
  • 我可能被允许更改 ITERATOR 定义本身,但前提是它不会破坏任何已经在使用它的现有代码。

最佳答案

你不能这样做。您的 START() 宏基本上采用一个参数,然后将其丢弃。

你可以做的是在你需要的地方定义UUU,例如。

#define PARTIAL(T) FULL(UUU,T)
#define FULL(U,V) doSth(U,V)
#define START() ITERATE(PARTIAL)

// ...

#define UUU blah

START()

#undef UUU

关于c++ - 在 C 宏中捕获名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415166/

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