Boost logo

Boost Users :

Subject: Re: [Boost-users] use boost preprocessor to generate T1 t1, T2 t2 ...
From: Lorenzo Caminiti (lorcaminiti_at_[hidden])
Date: 2012-10-26 19:26:19


On Fri, Oct 26, 2012 at 11:41 AM, weiqingh <weiqingh_at_[hidden]> wrote:
> I would like to use boost preprocessor to generate something like this: (for
> n from 0 to N with n = 2 in the following example)
>
> template <typename T1, typename T2>
> void foo(T1 t1, T2 t2)
>
> I have tried to use BOOST_PP_ENUM_PARAMS but cannot figure out how to get
> both T_i and t_i changed each time. is there some other macros I can use?
> any help is highly appreciated.

I haven't tried this code but something like this should work:

#include <boost/preprocessor.hpp>

#define TPARAM(z, m, unused) typename BOOST_PP_CAT(T, m)
#define PARAM(z, m, unused) BOOST_PP_CAT(T, m) BOOST_PP_CAT(t, m)

#define FOO(z, n, unused) \
    BOOST_PP_EXPR_IF(n, template<) \
        BOOST_PP_ENUM_ ## z(n, TPARAM, ~) \
    BOOST_PP_EXPR_IF(n, >) \
    void foo ( BOOST_PP_ENUM_ ## z(n, PARAM, ~) )

BOOST_PP_REPEAT(2, FOO, ~)

Compile it with -E -P (GCC), /EP (MSVC), etc to so see the pp output.

HTH,
--Lorenzo


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net