带有尾随下划线的 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##_.

Live Demo