The MPL Reference Manual: apply

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_wrap`n`< 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