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

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
Front Page / Metafunctions / Invocation / apply

apply

Synopsis

template<
      typename F
    >
struct apply0
{
    typedef unspecified type;
};

template<
      typename F, typename A1
    >
struct apply1
{
    typedef unspecified type;
};

...

template<
      typename F, typename A1,... typename An
    >
struct applyn
{
    typedef unspecified type;
};

template<
      typename F
    , typename A1 = unspecified
    ...
    , typename An = unspecified
    >
struct apply
{
    typedef unspecified type;
};

Description

Invokes a Metafunction Class or a Lambda Expression F with arguments A1,... An.

Header

#include <boost/mpl/apply.hpp>

Parameters

Parameter Requirement Description
F Lambda Expression An expression to invoke.
A1,... An Any type Invocation arguments.

Expression semantics

For any Lambda Expression f and arbitrary types a1,... an:

typedef applyn<f,a1,...an>::type t;
typedef apply<f,a1,...an>::type t;
Return type:Any type.
Semantics:Equivalent to typedef apply_wrapn< lambda<f>::type,a1,... an>::type t;.

Example

template< typename N1, typename N2 > struct int_plus
    : int_<( N1::value + N2::value )>
{
};

typedef apply< int_plus<_1,_2>, int_<2>, int_<3> >::type r1;
typedef apply< quote2<int_plus>, int_<2>, int_<3> >::type r2;

BOOST_MPL_ASSERT_RELATION( r1::value, ==, 5 );
BOOST_MPL_ASSERT_RELATION( r2::value, ==, 5 );

See also

Metafunctions, apply_wrap, lambda, quote, bind