用于扩展任意宏一定次数的宏?

ein*_*ica 3 c c++ macros metaprogramming

我想编写C宏,它接受一个整数文字或类似于整数文字的东西,以及另一个宏的名称,并将该其他宏扩展为整数字面值的多倍,索引作为参数,例如

MAGIC(4, FUN)
Run Code Online (Sandbox Code Playgroud)

扩展到

FUN(0) FUN(1) FUN(2) FUN(3)
Run Code Online (Sandbox Code Playgroud)

相反,如果我的MORE_MAGIC需要一个范围的起点和长度,那就更好了:

例如

MORE_MAGIC(1, 3, FUN)
Run Code Online (Sandbox Code Playgroud)

扩展到

FUN(1) FUN(2) FUN(3)
Run Code Online (Sandbox Code Playgroud)

注意:

  • 我可以忍受扩展的数量,我不知道,99或50,或类似的东西.
  • 你不能对FUN做出假设.需要是通用的.不,这不是手动展开循环.
  • C-only解决方案是最受欢迎的以及需要C++的解决方案(例如,如果您以某种方式在解决方案中使用模板).
  • 解决方案的总行数(包括#include但不包括注释)最好是适度的.说,不超过200.

zah*_*zah 9

Boost预处理器是一个广泛的库,专注于这种预处理器魔术.

它提供了一个名为BOOST_PP_REPEAT_FROM_TO的宏,它可以完全满足您的需求.

完整参考可在此处获得:http:
//boost.org/libs/preprocessor