【发布时间】:2016-09-19 16:55:11
【问题描述】:
我想编写一个 C 宏,它采用整数文字或类似于整数文字的东西,以及另一个宏的名称,并将另一个宏扩展为整数文字的值的次数,并使用索引作为参数,例如
MAGIC(4, FUN)
扩展到
FUN(0) FUN(1) FUN(2) FUN(3)
如果相反,我会使用 MORE_MAGIC 来获取范围开始和长度,那就更好了:
例如
MORE_MAGIC(1, 3, FUN)
扩展到
FUN(1) FUN(2) FUN(3)
注意:
- 我可以忍受扩展的数量被限制为,我不知道,99 或 50 或类似的东西。
- 您不能对 FUN 做出假设。需要是通用的。不,这不适用于手动展开 for 循环。
- 仅 C 的解决方案以及需要 C++ 的解决方案最受欢迎(例如,如果您在解决方案中以某种方式使用模板)。
- 解决方案的总行数(包括#include,但不包括 cmets)最好是适度的。比如说,不超过 200 个。
【问题讨论】:
-
你为什么要这个?扩展为 for 循环怎么样?
-
“你不能对 FUN 做出假设”和“使用模板”根本不兼容。通过允许使用模板,您可以让人们对 FUN 做出假设。听起来您不想说为什么要这样做,因为您认为自己最了解,但是您问题中的注释已经使我对此表示怀疑。
-
另外,编辑一个问题以取消现有答案的资格,该答案清楚地提供了您所要求的内容,这几乎没有完成,您应该已经知道了。
-
@hvd:恕我直言 1. 一开始就是一个无效的答案。 2. 当问题被误解或 OP 对他到底在问什么不够清楚时,通常会这样做。
-
@hvd:我只是想让解决方案使用模板(虽然我不确定这是否真的有用)
标签: c++ c macros metaprogramming