【问题标题】:Why can't I print out all of the member names of my macro-created struct?为什么我不能打印出我的宏创建的结构的所有成员名称?
【发布时间】:2017-06-28 14:58:45
【问题描述】:

在使用宏方面我有点菜鸟,但我遇到了一个我无法解释的问题。

我使用宏来生成 BlockA 结构,如下所示:

#define TO_STRUCT(structname, type, member, size) type member size;
#define MEMBER_COUNT(structname, type, member, size) +1
#define MEMBER_NAME(structname, type, member, size)  #member,

#define BLOCK_STRUCT_MEMBERS(p)\
    p(BlockA, RegTypeA, regA, [5])\
    p(BlockA, RegTypeB, regB, )\

 struct BlockA {
    BLOCK_STRUCT_MEMBERS(TO_STRUCT)
    int addr;
    BlockA(int address);
};

然后,我打印出了使用宏将多少成员放入结构的计数:

std::cout << BLOCK_STRUCT_MEMBERS(MEMBER_COUNT);

这会打印出正确的响应:2,如果我对在 BLOCK_STRUCT_MEMBERS 中定义时注释掉的第二个成员执行相同操作,它会打印出 1,这是有道理的。所以这似乎奏效了。但是,如果我尝试使用几乎完全相同的方法打印成员的名称,就像这样,它只会打印第一个成员的名称:

std::cout << BLOCK_STRUCT_MEMBERS(MEMBER_NAME)

它还抱怨说,当我尝试在它后面加上一个分号时它需要一个表达式,就像我打印计数时所做的那样。为什么会这样?

【问题讨论】:

  • 你为什么想要首先使用宏?
  • 您希望#define MEMBER_COUNT(structname, type, member, size) +1 扩展什么?你能提供一个MCVE 吗?

标签: c++ debugging struct macros


【解决方案1】:

我认为是“MEMBER_NAME”宏中“#member”后面的逗号。 如果我删除它,它对我来说很好。

【讨论】:

  • 谢谢!我认为这是一件小事:P。我什至不知道为什么我一开始就有逗号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多