我目前正在做一个项目,每个周期都很重要。在分析我的应用程序时,我发现一些内部循环的开销非常高,因为它们只包含一些机器指令。此外,这些循环中的迭代次数在编译时是已知的。
因此,我认为与其使用复制和粘贴手动展开循环,不如使用宏在编译时展开循环,以便以后轻松修改。
我的形象是这样的:
#define LOOP_N_TIMES(N, CODE) <insert magic here>
这样我就可以替换for (int i = 0; i < N, ++i) { do_stuff(); }
为:
#define INNER_LOOP_COUNT 4
LOOP_N_TIMES(INNER_LOOP_COUNT, do_stuff();)
它会自行展开:
do_stuff(); do_stuff(); do_stuff(); do_stuff();
由于 C 预处理器在大多数时候对我来说仍然是一个谜,我不知道如何实现这一点,但我知道这一定是可能的,因为 Boost 似乎有一个BOOST_PP_REPEAT
宏。不幸的是,我不能在这个项目中使用 Boost。