gpt4 book ai didi

C++ 宏 '##' 在 '->' 运算符后不起作用

转载 作者:IT老高 更新时间:2023-10-28 13:02:04 27 4
gpt4 key购买 nike

我有一个shared_ptr对象x,它有如下get和set方法:

x->a_value();
x->set_a_value();
x->b_value();
x->set_b_value();

当我尝试定义宏时:

#define MAC(type) \
x->set_##type##_value(val);

MAC(a)

它工作正常,但是当我这样做时:

#define MAC(type) \
x->##type##_value();

MAC(a)

它给出以下编译错误:粘贴形成的'->a',一个无效的预处理 token

最佳答案

预处理器处理“ token ” - 喜欢名称和运算符。

## 运算符通过将较小的部分粘贴在一起来创建新标记。在第一个示例中,set_##type##_value 变为 set_a_value,这是一个有效的 token 。

在第二个示例中,->##type##_value 将变为 ->a_value,这 不是 一个有效的预处理器 token 。应该是两个token。

如果你只是把行 x->type##_value(); 它应该工作。你会得到单独的标记 x, ->, a_value, (, ) , 和 ;.

关于C++ 宏 '##' 在 '->' 运算符后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49937805/

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