BOOST_PP_WHILE 宏表示一个循环结构。

用法

BOOST_PP_WHILE(pred, op, state)

参数

pred
形式为 pred(d, state) 的二元谓词。此谓词由 BOOST_PP_WHILE 使用下一个可用迭代 d 和当前 state 展开。此谓词必须展开为 0BOOST_PP_LIMIT_MAG 范围内的值。该结构继续循环,直到此谓词返回 0。当此谓词返回 0 时,BOOST_PP_WHILE 返回当前 state
op
形式为 op(d, state) 的二元操作。此操作由 BOOST_PP_WHILE 使用下一个可用迭代 d 和当前 state 展开。此宏反复应用于 state,每次产生一个新的 state,直到 pred 返回 0
state
初始状态。通常此参数是一个元组。

备注

此宏迭代 op(d, state),直到 pred(d, state) 为非零值。换句话说,展开为:
op(d, ... op(d, op(d, state)) ... )。
传递给 predopd 值表示下一个可用迭代。其他具有 _D 后缀变体的宏在内部使用 BOOST_PP_WHILE——例如,BOOST_PP_ADDBOOST_PP_ADD_D。使用这些 _D 版本并非严格必要,但将 d 值(传递给 predop 的值)传递给这些宏,可以使它们以最大效率重新进入 BOOST_PP_WHILE
要直接使用此 d 值,而不是简单地将其传递给另一个宏,请参见 BOOST_PP_WHILE_d
以前,此宏不能在 BOOST_PP_WHILE 内部递归使用。此限制已不再存在,因为库可以自动检测下一个可用迭代。

另请参见

需求

头文件: <boost/preprocessor/control/while.hpp>

示例代码

#include <boost/preprocessor/arithmetic/add.hpp>
#include <boost/preprocessor/control/while.hpp>
#include <boost/preprocessor/tuple/elem.hpp>

#define PRED(n, state) BOOST_PP_TUPLE_ELEM(2, 1, state)

#define OP(d, state) \
   OP_D( \
      d, \
      BOOST_PP_TUPLE_ELEM(2, 0, state), \
      BOOST_PP_TUPLE_ELEM(2, 1, state) \
   ) \
   /**/

#define OP_D(d, res, c) \
   ( \
      BOOST_PP_ADD_D( \
         d, \
         res, \
         BOOST_PP_DEC(c) \
      ), \
      BOOST_PP_DEC(c) \
   ) \
   /**/

#define SUMMATION(n) \
   BOOST_PP_TUPLE_ELEM( \
      2, 0, \
      BOOST_PP_WHILE(PRED, OP, (n, n)) \
   ) \
   /**/

SUMMATION(3) // expands to 6
SUMMATION(4) // expands to 10

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

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