⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reference.rst

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 RST
📖 第 1 页 / 共 2 页
字号:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The Boost Parameter Library Reference Documentation +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++:Authors:       David Abrahams, Daniel Wallin:Contact:       dave@boost-consulting.com, dalwan01@student.umu.se:organization:  `Boost Consulting`_:date:          $Date: 2005/07/17 19:53:01 $:copyright:     Copyright David Abrahams, Daniel Wallin                2005. 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)|(logo)|__.. |(logo)| image:: ../../../../boost.png   :alt: Boost__ ../../../../index.htm.. _`Boost Consulting`: http://www.boost-consulting.com//////////////////////////////////////////////////////////////////////////////.. contents::    :depth: 2//////////////////////////////////////////////////////////////////////////////.. role:: class    :class: class.. role:: concept    :class: concept.. role:: function    :class: function.. |ArgumentPack| replace:: :concept:`ArgumentPack`.. |ForwardSequence| replace:: :concept:`Forward Sequence`.. |ParameterSpec| replace:: :concept:`ParameterSpec`.. role:: vellipsis   :class: vellipsis.. section-numbering::    :depth: 2Preliminaries=============This section covers some basic information you'll need to know inorder to understand this referenceNamespaces----------In this document, all unqualified identifiers should be assumed tobe defined in namespace ``boost::parameter`` unless otherwisespecified.Exceptions----------No operation described in this documentthrows an exception unless otherwise specified.Thread Safety-------------All components of this library can be used safely from multiplethreads without synchronization.  [#thread]_Typography----------Names written in :concept:`sans serif type` represent concepts_.In code blocks, *italic type* represents unspecified text thatsatisfies the requirements given in the detailed description thatfollows the code block.In a specification of the tokens generated by a macro, **boldtype** is used to highlight the position of the expanded macroargument in the result.The special character β represents the value of |BOOST_PARAMETER_MAX_ARITY|_.//////////////////////////////////////////////////////////////////////////////Terminology===========.. |kw| replace:: keyword.. _kw:keyword  The name of a function parameter... _keyword tag type:.. |keyword tag type| replace:: `keyword tag type`_keyword tag type  A type used to uniquely identify a function parameter.  Typically  its name will be the same as that of the parameter... _positional:.. |positional| replace:: `positional`_positional argument  An argument passed with no explicit |kw|.  Its parameter is  determined in the usual C++ way: by position with respect to a  parameter list... _tag type:.. |tag type| replace:: `tag type`_tag type  Shorthand for “\ |keyword tag type|.”.. _keyword object:.. |keyword object| replace:: `keyword object`_keyword object  An instance of |keyword|_ ``<T>`` for some |tag  type| ``T``... _tagged reference:.. |tagged reference| replace:: `tagged reference`_tagged reference  An object whose type is associated with a |keyword tag type| (the  object's *keyword*), and that holds a reference (to the object's  *value*).    As a shorthand, a “tagged reference to ``x``\ ” means a tagged  reference whose *value* is ``x``... _tagged default:.. |tagged default| replace:: `tagged default`_tagged default   A |tagged reference| whose *value* represents the value of a  default argument. .. _tagged lazy default:.. |tagged lazy default| replace:: `tagged lazy default`_tagged lazy default   A |tagged reference| whose *value*, when invoked with no  arguments, computes a default argument value... _intended argument type:.. |intended argument type| replace:: `intended argument type`_intended argument type  The *intended argument type* of a single-element |ArgumentPack|_ is the  type of its element's *value*.  The intended argument type of any other  type ``X`` is ``X`` itself... Note::   In this reference, we will use concept names (and other names)   to describe both types and objects, depending on context.  So   for example, “an |ArgumentPack|_\ ” can refer to a type that   models |ArgumentPack|_ *or* an object of such a type. //////////////////////////////////////////////////////////////////////////////Concepts========This section describes the generic type concepts_ used by the Parameter library. .. _concepts: http://www.boost.org/more/generic_programming.html#concept|ArgumentPack|--------------An |ArgumentPack| is a collection of |tagged reference|\ s to theactual arguments passed to a function.  Every |ArgumentPack| isalso a valid MPL |ForwardSequence|__ consisting of the |keyword tagtype|\ s in its |tagged reference|\ s.__ ../../../mpl/doc/refmanual/forward-sequence.htmlRequirements............In the table below, * ``A`` is a model of |ArgumentPack|* ``x`` is an instance of ``A``* ``u`` is a |keyword object| of type ``K``* ``v`` is a |tagged default| with |tag type| ``L`` and *value* of type ``D``* ``w`` is a |tagged lazy default| with |tag type| ``M`` and *value* of type ``E const``* ``z`` is an |ArgumentPack| containing a single element (as created by |keyword|_\ ``<…>::operator=``)Any exceptions are thrown from the invocation of ``w``\ 's *value*will be propagated to the caller... table:: |ArgumentPack| requirements   +----------+-----------------------------+------------------+--------------------------------------+   |Expression| Type                        |Requirements      |Semantics/Notes                       |   +==========+=============================+==================+======================================+   |``x[u]``  |``binding<A,K>::type``       |``x`` contains an |Returns *b*\ 's *value* (by           |   |          |                             |element *b* whose |reference).                           |   |          |                             ||kw|_ is ``K``    |                                      |   +----------+-----------------------------+------------------+--------------------------------------+   |``x[u]``  |``binding<A,L,D>::type``     |*none*            |If ``x`` contains an element *b* whose|   |          |                             |                  ||kw|_ is the same as ``u``\ 's,       |   |          |                             |                  |returns *b*\ 's *value* (by           |   |          |                             |                  |reference).  Otherwise, returns ``u``\|   |          |                             |                  |'s *value*.                           |   +----------+-----------------------------+------------------+--------------------------------------+   |``x[w]``  |``lazy_binding<A,M,E>::type``|*none*            |If ``x`` contains an element *b* whose|   |          |                             |                  ||kw|_ is the same as ``w``\ 's,       |   |          |                             |                  |returns *b*\ 's *value* (by           |   |          |                             |                  |reference).  Otherwise, invokes ``w``\|   |          |                             |                  |'s *value* and returns the result.    |   +----------+-----------------------------+------------------+--------------------------------------+   |``x, z``  |Model of |ArgumentPack|      |*none*            |Returns an |ArgumentPack|_ containing |   |          |                             |                  |all the elements of both ``x`` and    |   |          |                             |                  |``z``.                                |   +----------+-----------------------------+------------------+--------------------------------------+.. _parameterspec:|ParameterSpec|---------------A |ParameterSpec| describes the type requirements for argumentscorresponding to a given |kw|_ and indicates whether the argumentis optional or required.  The table below details the allowed formsand describes their condition for satisfaction by an actualargument type. In each row,.. _conditions:* ``K`` is the |ParameterSpec|\ 's |keyword tag type|* ``A`` is an |intended argument type| associated with ``K``, if any* ``F`` is a unary `MPL lambda expression`_.. _`MPL lambda expression`: ../../../mpl/doc/refmanual/lambda-expression.html.. table:: |ParameterSpec| allowed forms and conditions of satisfaction   +----------------------+--------------+--------------------------------+   |Type                  |``A`` required|Condition ``A`` must satisfy    |   +======================+==============+================================+   |``K``                 |no            |*n/a*                           |   +----------------------+--------------+--------------------------------+   ||optional|_\ ``<K,F>``|no            |``mpl::apply<F,A>::type::value``|   |                      |              |is ``true``.                    |   +----------------------+--------------+--------------------------------+   ||required|_\ ``<K,F>``|yes           |``mpl::apply<F,A>::type::value``|   |                      |              |is ``true``.                    |   +----------------------+--------------+--------------------------------+The information in a |ParameterSpec| is used to `limit`__ thearguments that will be matched by `forwarding functions`_.  __ overloadcontrol_.. _overloadcontrol: index.html#controlling-overload-resolution.. _forwarding functions: index.html#forwarding-functions//////////////////////////////////////////////////////////////////////////////Class Templates===============.. |keyword| replace:: ``keyword``.. _keyword:``keyword``-----------The type of every |keyword object| is a specialization of |keyword|.:Defined in: `boost/parameter/keyword.hpp`____ ../../../../boost/parameter/keyword.hpp.. parsed-literal::    template <class Tag>    struct keyword    {        template <class T> |ArgumentPack|_ `operator=`_\(T& value) const;        template <class T> |ArgumentPack|_ `operator=`_\(T const& value) const;        template <class T> *tagged default* `operator|`_\(T& x) const;        template <class T> *tagged default* `operator|`_\(T const& x) const;        template <class F> *tagged lazy default* `operator||`_\(F const&) const;        static keyword<Tag>& get_\();    };.. |operator=| replace:: ``operator=``.. _operator=:``operator=``  .. parsed-literal::      template <class T> |ArgumentPack|_ operator=(T& value) const;      template <class T> |ArgumentPack|_ operator=(T const& value) const;  :Requires: nothing  :Returns:      an |ArgumentPack|_  containing a single |tagged reference| to      ``value`` with |kw|_ ``Tag`` .. _operator|:``operator|``  .. parsed-literal::      template <class T> *tagged default* operator|(T& x) const;      template <class T> *tagged default* operator|(T const& x) const;  :Returns: a |tagged default| with *value* ``x`` and |kw|_ ``Tag``... _operator||:``operator||``  .. parsed-literal::      template <class F> *tagged lazy default* operator||(F const& g) const;  :Requires: ``g()`` is valid, with type ``boost::``\ |result_of|_\    ``<F()>::type``.  [#no_result_of]_  :Returns: a |tagged lazy default| with *value* ``g`` and |kw|_ ``Tag``... _get:``get``  .. parsed-literal::        static keyword<Tag>& get\();  :Returns: a “singleton instance”: the same object will be    returned on each invocation of ``get()``.  :Thread Safety: ``get()`` can be called from multiple threads    simultaneously.``parameters``--------------Provides an interface for assembling the actual arguments to a`forwarding function` into an |ArgumentPack|, in which any|positional| arguments will be tagged according to thecorresponding template argument to ``parameters``.  .. _forwarding function: `forwarding functions`_:Defined in: `boost/parameter/parameters.hpp`____ ../../../../boost/parameter/parameters.hpp.. parsed-literal::    template <class P0 = *unspecified*, class P1 = *unspecified*, …class P\ β = *unspecified*>    struct parameters    {        template <class A0, class A1 = *unspecified*, …class A\ β = *unspecified*>        struct `match`_        {            typedef … type;        };        template <class A0>        |ArgumentPack|_ `operator()`_\(A0& a0) const;        template <class A0, class A1>        |ArgumentPack|_ `operator()`_\(A0& a0, A1& a1) const;         :vellipsis:`⋮`        template <class A0, class A1, …class A\ β>        |ArgumentPack|_ `operator()`_\(A0& a0, A1& a1, …A\ β& a\ β) const;    };:Requires: ``P0``, ``P1``, … ``P``\ β are models of |ParameterSpec|_. .. Note::  In this section, ``R``\ *i* and ``K``\ *i* are defined as  follows, for any argument type ``A``\ *i*:     | let ``D0`` the set [d0, …, d\ *j*] of all **deduced** *parameter specs* in [``P0``, …, ``P``\ β]     | ``R``\ *i* is ``A``\ *i*\ 's |intended argument type|     |     | if ``A``\ *i* is a result type of ``keyword<T>::``\ |operator=|_     | then      |     ``K``\ *i* is ``T``     | else     |     if some ``A``\ *j* where *j*\ ≤\ *i* is a result type of ``keyword<T>::``\ |operator=|_     |     *or* some ``P``\ *j* in *j*\ ≤\ *i* is **deduced**     |     then     |         if some *parameter spec* ``d``\ *j* in ``D``\ *i* matches ``A``\ *i*     |         then     |             ``K``\ *i* is ``d``\ *j*\ 's |keyword tag type|.     |             ``D``\ :sub:`i+1` is ``D``\ *i* - [``d``\ *j*]     |     else     |         ``K``\ *i* is ``P``\ *i*\ 's |keyword tag type|... _match:``match``  A |Metafunction|_ used to remove a `forwarding function`_ from overload resolution.  :Returns: if ``P0``, ``P1``, …\ ``P``\ β are *satisfied* (see    below), then ``parameters<P0,P1,…Pβ>``.  Otherwise,    ``match<A0,A1,…Aβ>::type`` is not defined.  ``P0``, ``P1``, …\ ``P``\ β are **satisfied** if, for  every *j* in 0…β, either:  * ``P``\ *j* is the *unspecified* default  * **or**, ``P``\ *j* is a *keyword tag type*  * **or**, ``P``\ *j* is |optional|_ ``<X,F>`` and either    - ``X`` is not ``K``\ *i* for any *i*,    - **or** ``X`` is some ``K``\ *i*  and ``mpl::apply<F,R``\ *i*\      ``>::type::value`` is ``true``  * **or**, ``P``\ *j* is |required|_ ``<X,F>``, and    - ``X`` is some ``K``\ *i*, **and**    - ``mpl::apply<F,R``\ *i*\ ``>::type::value`` is ``true``.. _operator():``operator()``  .. parsed-literal::      template <class A0> |ArgumentPack|_ operator()(A0 const& a0) const;       :vellipsis:`⋮`      template <class A0, …class A\ β> |ArgumentPack|_ `operator()`_\(A0 const& a0, …A\ β const& a\ β) const;  :Returns:      An |ArgumentPack|_ containing, for each ``a``\ *i*,        - if ``a``\ *i*,  is a single-element |ArgumentPack|, its element      - Otherwise, a |tagged reference| with |kw|_ ``K``\ *i* and *value* ``a``\ *i*.. |optional| replace:: ``optional``.. |required| replace:: ``required``.. _optional:.. _required:``optional``, ``required``--------------------------These templates describe the requirements on a function parameter.:Defined in: `boost/parameter/parameters.hpp`____ ../../../../boost/parameter/parameters.hpp:Specializations model: |ParameterSpec|_.. parsed-literal::    template <class Tag, class Predicate = *unspecified*>    struct optional;    template <class Tag, class Predicate = *unspecified*>    struct required;The default value of ``Predicate`` is an unspecified |Metafunction|_ that returns``mpl::true_`` for any argument... |Metafunction| replace:: :concept:`Metafunction`.. _Metafunction: ../../../mpl/doc/refmanual/metafunction.html``deduced``-----------

⌨️ 快捷键说明

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