c++ - 用于将任意宏扩展一定次数的宏?

标签 c++ c macros metaprogramming

我想编写 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,但不包括注释)最好是适度的。比如说,不超过 200。

最佳答案

Boost Preprocessor 是一个内容丰富的库,专注于这种预处理器魔法。

它提供了一个名为 BOOST_PP_REPEAT_FROM_TO 的宏,这正是您想要的。

此处提供完整引用:
http://boost.org/libs/preprocessor

关于c++ - 用于将任意宏扩展一定次数的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37380334/

相关文章:

c++ - libcurl curl_easy_setopt 长参数未正确传递 - va_arg(param, long)

c - 使用 mingw 在 Linux 上将 c 编译为 (windows)exe 时出错

c - 如何只为目标文件和头文件创建 make 文件?

string - 将 sizeof() offsetof() 宏的结果嵌入到 const char 数组中?

c - 如何在 C 的宏中多次调用一个函数?

c++ - 总的通用指针类型是什么?

c++ - 使用 CMake 将 open62541 库构建为外部库

python - 在 Cython 中是否可以使用 C++ 风格的内部类型定义?

c - C 语言中 printf() 函数中参数的执行

enums - Rust 宏从另一个枚举生成枚举