基于参数调用不同功能的宏

时间:2014-08-23 21:47:41

标签: c++ macros

大家好,我遇到了宏问题,所以我想我会练习,我正在看##宏运算符,并认为我可以用它来解决我的问题我不能调用基于的多个函数例如,如果我有一个这样的宏:

#define macro(a) func##a();


int main()
{

   .....
   for(int i = 0;i< length;i++)
   {
      macro(i)

   }



func1()
{



}
....
func31()
{


}

任何人都知道如何才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您只能组合两个预处理程序令牌。但是,func不是预处理程序令牌。你需要跳过一个额外的箍,呼叫某种形式的&#34; concat&#34;宏:

#define CONCAT(a, b) a ## b
#define macro(a) CONCAT(func,a)

当然,由您制作的令牌不会是func1,......,func31(当然,如果func0,他们还需要以funci开头你的逻辑是正确的)而是for。宏的扩展发生在编译开始时,而BOOST_PP_REPEAT - 循环的执行发生在运行时(某些优化可能会将其提升到编译时但不会影响宏)。 / p>

如果您需要结合宏来扩展整数序列,您可能需要查看Boost预处理器库,特别是{{1}}功能。

如果你只需要将整数序列静态扩展为函数调用,你也可以考虑查看在整数上模板化的函数模板:在尝试使用预处理器库之前,我当然会考虑使用模板的方法...