Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Macro BOOST_PROTO_LOCAL_ITERATE

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Macro BOOST_PROTO_LOCAL_ITERATE

BOOST_PROTO_LOCAL_ITERATE — Vertical repetition of a user-supplied macro.

Synopsis

// In header: <boost/proto/repeat.hpp>
BOOST_PROTO_LOCAL_ITERATE()

Description

BOOST_PROTO_LOCAL_ITERATE() is used generate the kind of repetitive code that is typical of EDSLs built with Proto. This macro causes the user-defined macro BOOST_PROTO_LOCAL_MACRO() to be expanded with values in the range specified by BOOST_PROTO_LOCAL_LIMITS.

Usage:

#include BOOST_PROTO_LOCAL_ITERATE()

Example:

// Generate BOOST_PROTO_MAX_ARITY-1 overloads of the
// following construct() function template.
#define BOOST_PROTO_LOCAL_MACRO(N, typename_A, A_const_ref, A_const_ref_a, ref_a)\
template<typename T, typename_A(N)>                               \
typename proto::result_of::make_expr<                             \
    proto::tag::function                                          \
  , construct_helper<T>                                           \
  , A_const_ref(N)                                                \
>::type const                                                     \
construct(A_const_ref_a(N))                                       \
{                                                                 \
    return proto::make_expr<                                      \
        proto::tag::function                                      \
    >(                                                            \
        construct_helper<T>()                                     \
      , ref_a(N)                                                  \
    );                                                            \
}
#define BOOST_PROTO_LOCAL_LIMITS (1, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY))
#include BOOST_PROTO_LOCAL_ITERATE()

Вышеприведенное включение<BOOST_PROTO_LOCAL_ITERATE()>сгенерирует следующий код:

template<typename T, typename A0>
typename proto::result_of::make_expr<
    proto::tag::function
  , construct_helper<T>
  , A0 const &
>::type const
construct(A0 const & a0)
{
    return proto::make_expr<
        proto::tag::function
    >(
        construct_helper<T>()
      , boost::ref(a0)
    );
}
template<typename T, typename A0, typename A1>
typename proto::result_of::make_expr<
    proto::tag::function
  , construct_helper<T>
  , A0 const &
  , A1 const &
>::type const
construct(A0 const & a0, A1 const & a1)
{
    return proto::make_expr<
        proto::tag::function
    >(
        construct_helper<T>()
      , boost::ref(a0)
      , boost::ref(a1)
    );
}
// ... and so on, up to BOOST_PROTO_MAX_ARITY-1 arguments ...

Если<BOOST_PROTO_LOCAL_LIMITS>не определен пользователем, то по умолчанию<(1, BOOST_PROTO_MAX_ARITY)>.

На каждой итерации<BOOST_PROTO_LOCAL_MACRO()>вызывается текущий номер итерации и следующие 4 макропараметра:

  • <BOOST_PROTO_LOCAL_typename_A>
  • <BOOST_PROTO_LOCAL_A>
  • <BOOST_PROTO_LOCAL_A_a>
  • <BOOST_PROTO_LOCAL_a>

Если эти макросы не определены пользователем, они по умолчанию соответственно:

После включения<BOOST_PROTO_LOCAL_ITERATE()>следующие макросы автоматически не определяются:

  • <BOOST_PROTO_LOCAL_MACRO>
  • <BOOST_PROTO_LOCAL_LIMITS>
  • <BOOST_PROTO_LOCAL_typename_A>
  • <BOOST_PROTO_LOCAL_A>
  • <BOOST_PROTO_LOCAL_A_a>
  • <BOOST_PROTO_LOCAL_a>


PrevUpHomeNext

Статья Macro BOOST_PROTO_LOCAL_ITERATE раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Reference ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:35:32/0.00838303565979/1