mirror of
https://github.com/boostorg/preprocessor.git
synced 2025-07-01 23:11:00 +02:00
63 lines
3.0 KiB
HTML
63 lines
3.0 KiB
HTML
![]() |
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE><BODY bgcolor="#FFFFFF">
|
||
|
|
||
|
<a href="index.htm"><IMG height=86 alt="c++boost.gif (8819 bytes)" src="../../../../c++boost.gif" width=277 align=center></a>
|
||
|
|
||
|
<hr>
|
||
|
|
||
|
<H1>#include <<a href="../../../../boost/preprocessor/for.hpp">boost/preprocessor/for.hpp</a>></H1>
|
||
|
|
||
|
<hr>
|
||
|
|
||
|
<H2><a name="BOOST_PP_FOR">#define BOOST_PP_FOR</a>(X,C,F,I)</H2>
|
||
|
<P>Repeats I(R,X) and iterates F(R,X) while C(R,X) is true.</P>
|
||
|
|
||
|
<P>In other words, expands to the sequence:</P>
|
||
|
|
||
|
<PRE>
|
||
|
I(R,X) I(R,F(R,X)) I(R,F(R,F(R,X))) ... I(R,F(R,F(...F(R,X)...)))
|
||
|
</PRE>
|
||
|
|
||
|
<P>The length of the sequence is determined by C(R,X).</P>
|
||
|
|
||
|
<H3>Legend</H3>
|
||
|
<UL>
|
||
|
<LI><B>X</B> is the current state of iteration. The state is usually a tuple.
|
||
|
<LI><B>C</B> is the condition for iteration. It must expand to a decimal
|
||
|
integer literal.
|
||
|
<LI><B>F</B> is the iterated macro. Note that if the state is a tuple, then
|
||
|
F(R,X) usually expands to a tuple of the same number of elements.
|
||
|
<LI><B>I</B> is the state instantiation macro.
|
||
|
<LI><B>R</B> is the recursion depth and should only be used as a parameter to
|
||
|
other macros using <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() or for invoking <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>##R()
|
||
|
directly. For each macro using <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>(), there is a version of the
|
||
|
macro, distinguished by the R suffix, that accepts an additional
|
||
|
recursion depth as the first parameter. This technique is necessary to
|
||
|
avoid recursively expanding the same macro again, which is not permitted
|
||
|
by the C++ preprocessor.
|
||
|
</UL>
|
||
|
|
||
|
<H3><a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>() vs <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>()</H3>
|
||
|
|
||
|
<P><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() is a generalization of <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>(). This means that
|
||
|
<a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>() can be implemented using <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>(). Unfortunately,
|
||
|
<a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() is slower than <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>(). In addition,
|
||
|
<a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>() was introduced earlier, is generally easier to use, and is
|
||
|
still quite useful on its own.</P>
|
||
|
|
||
|
<H3>2D and 3D repetition</H3>
|
||
|
|
||
|
<P><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() can be used for multidimensional repetition simply by
|
||
|
invoking <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>##R() directly.</P>
|
||
|
|
||
|
<hr>
|
||
|
|
||
|
<p>(C) Copyright Housemarque Oy 2002</p>
|
||
|
|
||
|
<p>Permission to copy, use, modify, sell and distribute this document is granted
|
||
|
provided this copyright notice appears in all copies. This document is provided
|
||
|
"as is" without express or implied warranty, and with no claim as to its suitability
|
||
|
for any purpose.</p>
|
||
|
|
||
|
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>
|
||
|
|
||
|
</BODY></HTML>
|