BOOST_PP_FOR 宏表示一种通用的水平重复构造。

用法

BOOST_PP_FOR(state, pred, op, macro)

参数

state
初始状态。
pred
形式为 pred(r, state) 的二元谓词。此宏必须扩展为0BOOST_PP_LIMIT_MAG范围内的整数。BOOST_PP_FOR重复扩展macro,直到此谓词返回非零值。此宏使用下一个可用的BOOST_PP_FOR重复次数和当前的state调用。
op
形式为 op(r, state) 的二元运算。BOOST_PP_FOR使用下一个可用的BOOST_PP_FOR重复次数和当前的state扩展此运算。此宏重复应用于state,每次产生一个新的state,直到pred返回0
macro
形式为 macro(r, state) 的二元宏。BOOST_PP_FOR使用下一个可用的BOOST_PP_FOR重复次数和当前的state扩展此宏。BOOST_PP_FOR重复此宏,直到pred返回0

备注

此宏扩展为以下序列:
macro(r, state) macro(r, op(r, state)) ... macro(r, op(r, ... op(r, state) ... ))
传递给predopmacror值表示下一个可用的BOOST_PP_FOR重复次数。其他具有_R后缀变体的宏在内部使用BOOST_PP_FOR——例如,BOOST_PP_LIST_FOR_EACHBOOST_PP_LIST_FOR_EACH_R。使用这些_R版本并非严格必要,但将r值(传递给predopmacro)传递给这些宏,可以使它们以最大效率重新进入BOOST_PP_FOR
要直接使用此r值,而不是简单地将其传递给另一个宏,请参见BOOST_PP_FOR_r
以前,此宏不能在BOOST_PP_FOR内部递归使用。此限制不再存在,因为库可以自动检测下一个可用的BOOST_PP_FOR重复次数。

参见

需求

头文件: <boost/preprocessor/repetition/for.hpp>

示例代码

#include <boost/preprocessor/arithmetic/inc.hpp>
#include <boost/preprocessor/comparison/not_equal.hpp>
#include <boost/preprocessor/repetition/for.hpp>
#include <boost/preprocessor/tuple/elem.hpp>

#define PRED(r, state) \
   BOOST_PP_NOT_EQUAL( \
      BOOST_PP_TUPLE_ELEM(2, 0, state), \
      BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2, 1, state)) \
   ) \
   /**/

#define OP(r, state) \
   ( \
      BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2, 0, state)), \
      BOOST_PP_TUPLE_ELEM(2, 1, state) \
   ) \
   /**/

#define MACRO(r, state) BOOST_PP_TUPLE_ELEM(2, 0, state)

BOOST_PP_FOR((5, 10), PRED, OP, MACRO) // expands to 5 6 7 8 9 10

© 版权所有 Housemarque Oy 2002
© 版权所有 Paul Mensonides 2002

根据 Boost 软件许可证版本 1.0 分发。(参见随附文件 LICENSE_1_0.txt 或复制自 www.boost.org/LICENSE_1_0.txt