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 + -
显示快捷键?