apply_wrap.rst

来自「Boost provides free peer-reviewed portab」· RST 代码 · 共 135 行

RST
135
字号
.. Metafunctions/Invocation//apply_wrap |20.. Copyright Aleksey Gurtovoy, David Abrahams 2007... Distributed under the Boost.. Software License, Version 1.0. (See accompanying.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)apply_wrap==========Synopsis--------.. parsed-literal::    template<           typename F        >    struct apply_wrap0    {        typedef |unspecified| type;    };    template<           typename F, typename A1        >    struct apply_wrap1    {        typedef |unspecified| type;    };        |...|        template<           typename F, typename A1,\ |...| typename An        >    struct apply_wrap\ *n*    {        typedef |unspecified| type;    };Description-----------Invokes a |Metafunction Class| ``F`` with arguments ``A1``,... ``An``. In essence, ``apply_wrap`` forms are nothing more than syntactic wrappers around ``F::apply<A1,... An>::type`` / ``F::apply::type`` expressions (hence the name). They provide a more concise notation and higher portability than their underlaying constructs at the cost of an extra template instantiation.Header------.. parsed-literal::        #include <boost/mpl/apply_wrap.hpp>Parameters----------+---------------+-----------------------------------+-----------------------------------------------+| Parameter     | Requirement                       | Description                                   |+===============+===================================+===============================================+| ``F``         | |Metafunction Class|              | A metafunction class to invoke.               |+---------------+-----------------------------------+-----------------------------------------------+| |A1...An|     | Any type                          | Invocation arguments.                         |+---------------+-----------------------------------+-----------------------------------------------+Expression semantics--------------------For any |Metafunction Class| ``f`` and arbitrary types |a1...an|:.. parsed-literal::    typedef apply_wrap\ *n*\ <f,a1,\ |...|\ an>::type t;:Return type:    Any type.:Semantics:    If ``n > 0``, equivalent to ``typedef f::apply<a1,... an>::type t;``,    otherwise equivalent to either ``typedef f::apply::type t;`` or    ``typedef f::apply<>::type t;`` depending on whether ``f::apply`` is     a class or a class template.Example-------.. parsed-literal::    struct f0    {        template< typename T = int > struct apply        {            typedef char type;        };    };            struct g0    {        struct apply { typedef char type; };    };    struct f2    {        template< typename T1, typename T2 > struct apply        {            typedef T2 type;        };    };        typedef apply_wrap\ ``0``\ < f0 >::type r1;    typedef apply_wrap\ ``0``\ < g0 >::type r2;    typedef apply_wrap\ ``2``\ < f2,int,char >::type r3;    BOOST_MPL_ASSERT(( is_same<r1,char> ));    BOOST_MPL_ASSERT(( is_same<r2,char> ));    BOOST_MPL_ASSERT(( is_same<r3,char> ));See also--------|Metafunctions|, |Invocation|, |apply|, |lambda|, |quote|, |bind|, |protect|

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?