我希望能够创建一个调用其他宏的宏。我要调用的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_filters
和fitler_10_set_2_filters
。有没有一种方法可以将提供给CreateBenchmark
宏的值细分为传递给BENCHMARK
和BENCHMARK_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] 删除。
我来说两句