带有尾随下划线的 C++ 宏标记粘贴
C++ macro token pasting with a trailing underscore
我正在尝试编写一个宏来自动创建设置脏标志的访问器和修改器方法。
#define DIRTY_PROPERTY(type, name, var) \
private: \
type ##var_; \
\
public: \
type get##name() { return ##var_; } \
void set##name(type val) { \
dirty_ = true; \
##var_ = val; \
}
这样使用:
class RenderObject
{
DIRTY_PROPERTY(bool, FlipX, flipX)
}
我遇到的问题是它吞噬了 ##var_
中的尾随下划线,而不是用 var
.
的值替换 ##var
如何告诉它前导 _
不是变量名的一部分?
##
位于您要粘贴在一起的两个标记之间。在这种情况下,您将 var
和 _
粘贴在一起,因此 ##var_
应该是 var##_
.
我正在尝试编写一个宏来自动创建设置脏标志的访问器和修改器方法。
#define DIRTY_PROPERTY(type, name, var) \
private: \
type ##var_; \
\
public: \
type get##name() { return ##var_; } \
void set##name(type val) { \
dirty_ = true; \
##var_ = val; \
}
这样使用:
class RenderObject
{
DIRTY_PROPERTY(bool, FlipX, flipX)
}
我遇到的问题是它吞噬了 ##var_
中的尾随下划线,而不是用 var
.
##var
如何告诉它前导 _
不是变量名的一部分?
##
位于您要粘贴在一起的两个标记之间。在这种情况下,您将 var
和 _
粘贴在一起,因此 ##var_
应该是 var##_
.