我有一个shared_ptr对象x,它有get和set方法,如下所示:
x->a_value();
x->set_a_value();
x->b_value();
x->set_b_value();
Run Code Online (Sandbox Code Playgroud)
当我尝试定义宏时:
#define MAC(type) \
x->set_##type##_value(val);
MAC(a)
Run Code Online (Sandbox Code Playgroud)
它工作正常,但当我这样做:
#define MAC(type) \
x->##type##_value();
MAC(a)
Run Code Online (Sandbox Code Playgroud)
它给出了以下编译错误:
pasting formed '->a', an invalid preprocessing token
Bo *_*son 51
预处理器适用于"令牌" - 喜欢名称和运算符.
该##运营商通过粘贴小部分一起创建一个新的令牌.在第一个示例中,set_##type##_value变为set_a_value有效令牌.
在第二个例子->##type##_value将成为->a_value,这是不是一个有效的预处理记号.它应该是两个令牌.
如果你只是建立x->type##_value();它应该工作.你得到的分隔标记x,->,a_value,(,),和;.
Que*_*tin 16
它在锡上的含义:->a不是一个有效的预处理器令牌:它是两个令牌.你不需要粘贴在这里.
#define MAC(type) \
x->type##_value();
Run Code Online (Sandbox Code Playgroud)