我有一个在C++中经常使用的“foreach”宏,它适用于大多数STL容器:#defineforeach(var,container)\for(typeof((container).begin())var=(container).begin();\var!=(container).end();\++var)(注意'typeof'是一个gcc扩展。)它是这样使用的:std::vectorblorgi=...;foreach(blorgus,blorgi){blorgus->draw();}我想做一些类似的东西来迭代map的值。也许称它为“foreach_value”。所以不要写forea
我有一个在C++中经常使用的“foreach”宏,它适用于大多数STL容器:#defineforeach(var,container)\for(typeof((container).begin())var=(container).begin();\var!=(container).end();\++var)(注意'typeof'是一个gcc扩展。)它是这样使用的:std::vectorblorgi=...;foreach(blorgus,blorgi){blorgus->draw();}我想做一些类似的东西来迭代map的值。也许称它为“foreach_value”。所以不要写forea
我的猜测是这个问题的答案是否定的,但如果有办法,那就太棒了。为了澄清,假设我有以下宏:#defineMY_VARIADIC_MACRO(X...)//Doessomestuffhereinthemacrodefinition我想做的是在将X的所有变量传递给可变参数函数之前以某种方式对其进行字符串化;这里的关键字是之前。我意识到没有办法真正从宏定义中访问各个参数,但是有没有办法将所有参数字符串化,可能类似于以下内容?#defineMY_VARIADIC_MACRO(X...)some_variadic_function("somestring",#X) 最佳答
我的猜测是这个问题的答案是否定的,但如果有办法,那就太棒了。为了澄清,假设我有以下宏:#defineMY_VARIADIC_MACRO(X...)//Doessomestuffhereinthemacrodefinition我想做的是在将X的所有变量传递给可变参数函数之前以某种方式对其进行字符串化;这里的关键字是之前。我意识到没有办法真正从宏定义中访问各个参数,但是有没有办法将所有参数字符串化,可能类似于以下内容?#defineMY_VARIADIC_MACRO(X...)some_variadic_function("somestring",#X) 最佳答
我目前正在开展一个项目,每个周期都很重要。在分析我的应用程序时,我发现一些内部循环的开销非常高,因为它们只包含一些机器指令。此外,这些循环中的迭代次数在编译时是已知的。因此,我认为与其通过复制和粘贴手动展开循环,不如使用宏在编译时展开循环,以便以后轻松修改。我的形象是这样的:#defineLOOP_N_TIMES(N,CODE)这样我就可以替换for(inti=0;i与:#defineINNER_LOOP_COUNT4LOOP_N_TIMES(INNER_LOOP_COUNT,do_stuff();)它会自行展开:do_stuff();do_stuff();do_stuff();do_
我目前正在开展一个项目,每个周期都很重要。在分析我的应用程序时,我发现一些内部循环的开销非常高,因为它们只包含一些机器指令。此外,这些循环中的迭代次数在编译时是已知的。因此,我认为与其通过复制和粘贴手动展开循环,不如使用宏在编译时展开循环,以便以后轻松修改。我的形象是这样的:#defineLOOP_N_TIMES(N,CODE)这样我就可以替换for(inti=0;i与:#defineINNER_LOOP_COUNT4LOOP_N_TIMES(INNER_LOOP_COUNT,do_stuff();)它会自行展开:do_stuff();do_stuff();do_stuff();do_
我正在以编程方式生成一堆仿函数,为了使生成的代码更具可读性,我正在尝试提出一个宏来扩展以下行,SET_STATE(FunctorA,a,b);refa;refb;FunctorA(refa,refb){this->a=a;this->b=b;}基本上它将扩展到第一个参数构造函数。可变参数部分是构造函数的参数数量。是否可以在宏内部循环并在预处理期间生成此代码,即使它对这种特殊情况没有意义,但我有一些具有20个左右变量的仿函数,它们可以访问它会清理我生成的代码很多。所有参数的类型相同,只有名称不同。 最佳答案 如果boost::prep
我正在以编程方式生成一堆仿函数,为了使生成的代码更具可读性,我正在尝试提出一个宏来扩展以下行,SET_STATE(FunctorA,a,b);refa;refb;FunctorA(refa,refb){this->a=a;this->b=b;}基本上它将扩展到第一个参数构造函数。可变参数部分是构造函数的参数数量。是否可以在宏内部循环并在预处理期间生成此代码,即使它对这种特殊情况没有意义,但我有一些具有20个左右变量的仿函数,它们可以访问它会清理我生成的代码很多。所有参数的类型相同,只有名称不同。 最佳答案 如果boost::prep
有没有更好的方法来“重载”这样的宏?我需要一个接受不同数量参数的宏。#defineDEBUG_TRACE_1(p1)std::stringp[]={p1};log_log(__FUNCTION__,p,1)#defineDEBUG_TRACE_2(p1,p2)std::stringp[]={p1,p2};log_log(__FUNCTION__,p,2)#defineDEBUG_TRACE_3(p1,p2,p3)std::stringp[]={p1,p2,p3};log_log(__FUNCTION__,p,3)#defineDEBUG_TRACE_4(p1,p2,p3,p4)std:
有没有更好的方法来“重载”这样的宏?我需要一个接受不同数量参数的宏。#defineDEBUG_TRACE_1(p1)std::stringp[]={p1};log_log(__FUNCTION__,p,1)#defineDEBUG_TRACE_2(p1,p2)std::stringp[]={p1,p2};log_log(__FUNCTION__,p,2)#defineDEBUG_TRACE_3(p1,p2,p3)std::stringp[]={p1,p2,p3};log_log(__FUNCTION__,p,3)#defineDEBUG_TRACE_4(p1,p2,p3,p4)std: