【问题标题】:C++ using private and public in macro, inside classC ++在类内部宏中使用私有和公共
【发布时间】:2017-09-27 20:24:56
【问题描述】:

我正在尝试制作一个宏来填充我在游戏黑客中使用的类。让我告诉你我想要做什么:

#define pad(loc, size)  private: \
                    char _pad#loc[#size]; \
                    public:

然后我想像这样使用它:

class C_VTable {
public:
   float member;          // <- public
   pad(0x4, 0x30);        // <- private im not sure how to make the pad name be like pad0x4
   float anothermember;   // <- public again
};

我该怎么做,因为我收到一个错误,说它应该是 ; 有点乱,但希望你能理解。

非常感谢任何帮助:)

【问题讨论】:

  • 你的问题是……?
  • @FredLarson 已编辑。忘记问了。。
  • pad(0x4, 0x30) 不带;
  • # 创建一个字符串文字,使用##__padlog 粘合在一起
  • 保留带有双下划线的标识符。见stackoverflow.com/q/228783/10077

标签: c++ padding


【解决方案1】:

使用## 粘贴运算符将两个标记组合在一起。此外,不要使用 # 对大小进行字符串化 - 您不希望在方括号内使用字符串。

#define pad(loc, size)  private: \
                    char __pad##loc[size]; \
                    public:

【讨论】:

  • 非常感谢。另一个问题,如果我做 pad(0x7AE, 2),pad 的名字是 __pad0x7AE[2], __pad7AE[2] 还是 __pad1966[2] (7AEh)?
  • 字段名称将为__pad0x7AE。令牌会按照您的拼写方式粘贴。
猜你喜欢
  • 2014-01-01
  • 2014-06-03
  • 2023-04-08
  • 2012-11-10
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 2011-03-11
  • 2016-07-31
相关资源
最近更新 更多