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

The MPL Reference Manual: bind

Boost , ,

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

Front Page / Metafunctions / Composition and Argument Binding / bind

bind

Synopsis

template<
      typename F
    >
struct bind0
{
    // unspecified
    // ...
};
template<
      typename F, typename A1
    >
struct bind1
{
    // unspecified
    // ...
};
...
template<
      typename F, typename A1,... typename An
    >
struct bindn
{
    // unspecified
    // ...
};
template<
      typename F
    , typename A1 = unspecified
    ...
    , typename An = unspecified
    >
struct bind
{
    // unspecified
    // ...
};

Description

Связатьявляется первобытным для высшего порядка.Класс метафункцийСостав и связывание аргументов. По сути, это аналог компиляции времени аналогичной функциональности времени выполнения, предоставляемойBoost.BindиBoost. лямбдаБиблиотеки.

Parameters

Parameter Requirement Description
F Класс метафункций Класс метафункций для выполнения связывания.
А1...Ан Любой тип Аргументы, чтобы связать.

Expression semantics

Для любогометафункционального классаfи произвольных типовa1...a:

typedef bind<f,a1,...an> g;
typedef bindn<f,a1,...an> g;
Return type:Класс метафункций
Semantics:

Equivalent to

struct g
{
    template<
          typename U1 = unspecified
        ...
        , typename Un = unspecified
        >
    struct apply
        : apply_wrapn<
              typename h0<f,U1,...Un>::type
            , typename h1<a1,U1,...Un>::type
            ...
            , typename hn<an,U1,...Un>::type
            >
    {
    };
};

гдеhkэквивалентно

template< typename X, typename U1,... typename Un > struct hk
    : apply_wrapn<X,U1,...Un>
{
};

Еслиfилиakявляетсявыражением связиилизаполнителем, и

template< typename X, typename U1,... typename Un > struct hk
{
    typedef X type;
};

otherwise. [Note: Every nth appearance of the unnamed placeholder in the bind<f,a1,...an> specialization is replaced with the corresponding numbered placeholder _nend note]

Example

struct f1
{
    template< typename T1 > struct apply
    {
        typedef T1 type;
    };
};
struct f5
{
    template< typename T1, typename T2, typename T3, typename T4, typename T5 >
    struct apply
    {
        typedef T5 type;
    };
};
typedef apply_wrap1<
      bind1<f1,_1>
    , int
    >::type r11;
typedef apply_wrap5<
      bind1<f1,_5>
    , void,void,void,void,int
    >::type r12;
BOOST_MPL_ASSERT(( is_same<r11,int> ));
BOOST_MPL_ASSERT(( is_same<r12,int> ));
typedef apply_wrap5<
      bind5<f5,_1,_2,_3,_4,_5>
    , void,void,void,void,int
    >::type r51;
typedef apply_wrap5<
      bind5<f5,_5,_4,_3,_2,_1>
    , int,void,void,void,void
    >::type r52;
BOOST_MPL_ASSERT(( is_same<r51,int> ));
BOOST_MPL_ASSERT(( is_same<r52,int> ));

Статья The MPL Reference Manual: bind раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:58:23/0.0055608749389648/1