quote.rst

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

RST
143
字号
.. Metafunctions/Composition and Argument Binding//quote |40.. 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)quote=====Synopsis--------.. parsed-literal::    template<          template< typename P1 > class F        , typename Tag = |unspecified|        >    struct quote1    {        // |unspecified|        // |...|    };        |...|        template<          template< typename P1,\ |...| typename P\ *n* > class F        , typename Tag = |unspecified|        >    struct quote\ *n*    {        // |unspecified|        // |...|    };    Description-----------``quote``\ *n* is a higher-order primitive that wraps an *n*-ary |Metafunction| to create a corresponding |Metafunction Class|.Header------.. parsed-literal::        #include <boost/mpl/quote.hpp>Model of--------|Metafunction Class|Parameters----------+---------------+-----------------------+-----------------------------------------------+| Parameter     | Requirement           | Description                                   |+===============+=======================+===============================================+| ``F``         | |Metafunction|        | A metafunction to wrap.                       |+---------------+-----------------------+-----------------------------------------------+| ``Tag``       | Any type              | A tag determining wrap semantics.             |+---------------+-----------------------+-----------------------------------------------+Expression semantics--------------------For any *n*-ary |Metafunction| ``f`` and arbitrary type ``tag``:.. parsed-literal::    typedef quote\ *n*\ <f> g;    typedef quote\ *n*\ <f,tag> g;:Return type:    |Metafunction Class|:Semantics:    Equivalent to        .. parsed-literal::            struct g        {            template< typename A1,\ |...| typename A\ *n* > struct apply                : f<A1,\ |...|\ A\ *n*\ >            {            };        };            if ``f<A1,...An>`` has a nested type member ``::type``, and to    .. parsed-literal::            struct g        {            template< typename A1,\ |...| typename A\ *n* > struct apply            {                typedef f<A1,\ |...|\ A\ *n*\ > type;            };        };    otherwise.Example-------.. parsed-literal::    template< typename T > struct f1    {        typedef T type;    };    template<        typename T1, typename T2, typename T3, typename T4, typename T5        >    struct f5    {        // no 'type' member!    };    typedef quote\ ``1``\<f1>::apply<int>::type t1;    typedef quote\ ``5``\<f5>::apply<char,short,int,long,float>::type t5;        BOOST_MPL_ASSERT(( is_same< t1, int > ));    BOOST_MPL_ASSERT(( is_same< t5, f5<char,short,int,long,float> > ));See also--------|Composition and Argument Binding|, |Invocation|, |bind|, |lambda|, |protect|, |apply|

⌨️ 快捷键说明

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