如何在调用另一个宏时使用宏参数?

Paymahn Moghadasian

我希望能够创建一个调用其他宏的宏。我要调用的Benchmark宏是folly

最终,我想要一堆看起来像这样的宏:

BENCHMARK(filter_10_vector_1_filter, n) { ... }
BENCHMARK(filter_10_set_1_filter, n) { ... }
BENCHMARK(filter_10_vector_2_filter, n) { ... }
BENCHMARK(filter_10_set_2_filter, n) { ... }
BENCHMARK(filter_10_vector_3_filter, n) { ... }
BENCHMARK(filter_10_set_3_filter, n) { ... }
... all the way to 10_filter

BENCHMARK(filter_100_vector_1_filter, n) { ... }
BENCHMARK(filter_100_set_1_filter, n) { ... }
... all the way to 10_filter

我尝试创建一个看起来像这样的宏:

#define CreateBenchmark(numElements, numFilters) \
  BENCHMARK(filter_##numElements_vector_##numFilters_filters, n) { ... } \
  BENCHMARK_RELATIVE(filter_##numElements_set_##numFilters_filters, n) { ... }

CreateBenchmark(10, 2);

希望可以将我需要编写的宏数量减少一半。但是,##numElements##numFilters替代并没有像我希望的那样发生。CreateBenchmark(10, 2)通话结果

============================================================================
FilterWithSetBenchmark.cpp  relative  time/iter  iters/s
============================================================================
filter_numElements_vector_numFilters_filters               264.35us    3.78K
filter_numElements_set_numFilters_filters         99.93%   264.54us    3.78K
============================================================================

我期待filter_10_vector_2_filtersfitler_10_set_2_filters有没有一种方法可以将提供给CreateBenchmark宏的值细分为传递给BENCHMARKBENCHMARK_RELATIVE调用的值

额外的好处是,我的CreateBenchmark可以使用for循环创建所有的,XX_filters以便一个调用CreateBenchmark生成20个宏调用(10个用于_vector_和10个用于_set_)吗?

疯狂物理学家

您忘记了结尾的串联运算符##

#define CreateBenchmark(numElements, numFilters) \
  BENCHMARK(filter_ ## numElements ## _vector_ ## numFilters ## _filters, n) { ... } \
  BENCHMARK_RELATIVE(filter_ ## numElements ## _set_ ## numFilters ## _filters, n) { ... }

##就像+在Java或Python中一样将其视为字符串连接运算符

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个宏的字符串参数中使用Freemarker宏调用

来自分类Dev

在guile方案中,如何从另一个宏调用宏时防止重命名?

来自分类Dev

如何在VBA中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?

来自分类Dev

C可变参数宏调用另一个可变参数宏

来自分类Dev

C可变参数宏调用另一个可变参数宏

来自分类Dev

GCC宏扩展以调用另一个宏

来自分类Dev

如何在将C ++宏作为参数传递给另一个宏之前对其进行扩展

来自分类Dev

如何创建一个C ++宏来定义使用调用另一个函数的参数列表的函数?

来自分类Dev

当子类未使用另一个宏时,C ++宏将失败

来自分类Dev

如何创建一个 Excel 宏来停止另一个宏并重新调用它?

来自分类Dev

如何使用从另一个宏中的宏变量返回的值

来自分类Dev

如何定义使用另一个宏的C宏?

来自分类Dev

如何使用从另一个宏中的宏变量返回的值

来自分类Dev

如何使用另一个宏创建 C 宏名称?

来自分类Dev

无法从另一个调用#define宏

来自分类Dev

在将宏传递给另一个宏而不是直接传递事物时,会出现多余的“空”参数

来自分类Dev

如何使用一个板条箱中的另一个宏?

来自分类Dev

从C ++中的另一个宏调用多个宏

来自分类Dev

宏中的逗号以将参数传递给另一个宏函数(#define a,b)

来自分类Dev

NASM - 宏本地标签作为另一个宏的参数

来自分类Dev

在另一个宏内展开X宏

来自分类Dev

在将宏作为参数传递给另一个宏之前按值翻译宏

来自分类Dev

当宏在当前工作簿上时使用另一个工作簿

来自分类Dev

使用sendKeys函数停止使用另一个宏(按钮)的宏执行

来自分类Dev

将类型参数用作传递给宏实现的另一个类型的类型参数时,类型错误

来自分类Dev

Clojure宏在另一个宏中:如何从符号生成字符串

来自分类Dev

如何检查宏的元素是否在另一个宏中

来自分类Dev

如何使用另一个定义使 if/else 预处理器宏无效?

来自分类Dev

当我从另一个宏“调用”它时,宏不起作用,但是当我单独选择它时,它确实起作用

Related 相关文章

  1. 1

    在另一个宏的字符串参数中使用Freemarker宏调用

  2. 2

    在guile方案中,如何从另一个宏调用宏时防止重命名?

  3. 3

    如何在VBA中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?

  4. 4

    C可变参数宏调用另一个可变参数宏

  5. 5

    C可变参数宏调用另一个可变参数宏

  6. 6

    GCC宏扩展以调用另一个宏

  7. 7

    如何在将C ++宏作为参数传递给另一个宏之前对其进行扩展

  8. 8

    如何创建一个C ++宏来定义使用调用另一个函数的参数列表的函数?

  9. 9

    当子类未使用另一个宏时,C ++宏将失败

  10. 10

    如何创建一个 Excel 宏来停止另一个宏并重新调用它?

  11. 11

    如何使用从另一个宏中的宏变量返回的值

  12. 12

    如何定义使用另一个宏的C宏?

  13. 13

    如何使用从另一个宏中的宏变量返回的值

  14. 14

    如何使用另一个宏创建 C 宏名称?

  15. 15

    无法从另一个调用#define宏

  16. 16

    在将宏传递给另一个宏而不是直接传递事物时,会出现多余的“空”参数

  17. 17

    如何使用一个板条箱中的另一个宏?

  18. 18

    从C ++中的另一个宏调用多个宏

  19. 19

    宏中的逗号以将参数传递给另一个宏函数(#define a,b)

  20. 20

    NASM - 宏本地标签作为另一个宏的参数

  21. 21

    在另一个宏内展开X宏

  22. 22

    在将宏作为参数传递给另一个宏之前按值翻译宏

  23. 23

    当宏在当前工作簿上时使用另一个工作簿

  24. 24

    使用sendKeys函数停止使用另一个宏(按钮)的宏执行

  25. 25

    将类型参数用作传递给宏实现的另一个类型的类型参数时,类型错误

  26. 26

    Clojure宏在另一个宏中:如何从符号生成字符串

  27. 27

    如何检查宏的元素是否在另一个宏中

  28. 28

    如何使用另一个定义使 if/else 预处理器宏无效?

  29. 29

    当我从另一个宏“调用”它时,宏不起作用,但是当我单独选择它时,它确实起作用

热门标签

归档