Boost Parameter 庫參考文檔

作者: David Abrahams
Daniel Wallin
聯繫方式: dave@boost-consulting.com, dalwan01@student.umu.se
組織: Boost Consulting
日期: 2005-07-17
版權: 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)

Boost


目錄


1   Preliminaries 預備知識

This section covers some basic information you'll need to know in order to understand this reference

這一節涵蓋了你需要知道的一些基本信息,這樣你才能理解這份參考文檔。

1.1   Namespaces 名字空間

In this document, all unqualified identifiers should be assumed to be defined in namespace boost::parameter unless otherwise specified.

在這個文檔中,除非我們特別指出,所有非完全路徑引用的(unqualified)標識符都假定是在 boost::parameter 名字空間中定義的。

1.2   Exceptions 異常

No operation described in this document throws an exception unless otherwise specified.

除非我們特別指出,這個文檔中描述的所有操作都不拋出異常。

1.3   Thread Safety 線程安全

All components of this library can be used safely from multiple threads without synchronization.1

這個庫的所有組件都可以安全的用在多線程環境中,而不需要同步(synchronization)。1

1.4   Typography 印刷風格

Names written in sans serif type represent concepts.

sans serif type 字體印刷的名字表示 概念.

In code blocks, italic type represents unspecified text that satisfies the requirements given in the detailed description that follows the code block.

在代碼段中,斜體(italic type) 的字體表示不詳細給出的代碼,他們滿足在代碼段文本中詳細描述的要求。

In a specification of the tokens generated by a macro, bold type is used to highlight the position of the expanded macro argument in the result.

在關於宏(macro)生成的符號(token)的文檔規範中,粗體(bold type) 字體用來突出顯示宏參數在展開後的結果中的位置。

The special character β represents the value of BOOST_PARAMETER_MAX_ARITY.

特殊字符 β 表示 BOOST_PARAMETER_MAX_ARITY 宏的值。


2   Terminology 術語

keyword 關鍵字
The name of a function parameter.
函數參變量的名字.
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 argument 位置相關的參數
An argument passed with no explicit keyword. Its parameter is determined in the usual C++ way: by position with respect to a parameter list.
不使用顯式關鍵字傳遞的參數。它的參變量是以 C++ 的方式來確定的:根據在參變量列表中的位置(來確定參數屬於哪一參變量)
tag type 標籤類型
Shorthand for 「keyword tag type.」
關鍵字標籤類型(keyword tag type)」 的縮寫
keyword object 關鍵字對像
An instance of keyword <T> for some tag type T.
某個關鍵字類型 Tkeyword <T> 實例。
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).

一個保存了指向目標對像值引用的對象,其類型是跟 關鍵字標籤類型(keyword tag type) 相關聯的。

As a shorthand, a 「tagged reference to x」 means a tagged reference whose value is x.

作為簡寫形式, 一個 「對 x 的帶標籤的引用」 表示其 x 的一個帶標籤的引用。

tagged default 帶標籤的默認值
A tagged reference whose value represents the value of a default argument.
一個 帶標籤的引用(tagged reference),其 表示一個參數的默認值。
tagged lazy default 延遲計算的帶標籤的默認值
A tagged reference whose value, when invoked with no arguments, computes a default argument value.
一個 帶標籤的引用(tagged reference),如果在調用的時候沒有傳入參數,其 被計算出來作為這個參數的默認值。
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.
含有單一元素的參數包(ArgumentPack)預計的參數類型(intended argument type) 就是這個單一元素的 的類型。 其他任何一個類型 X 的 預計的參數類型(intended argument type) 就是 X 本身。

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.

在這一份參考文檔中,我們將使用概念的名字(和其他的名字)來描述類型和對象,其含義取決於不同的上下文。 所以,比如說,「一個 參數包(ArgumentPack)」 就可以指代一 個 參數包(ArgumentPack) 模式的類型,或者 一個這種類型的對象。


3   Concepts 概念

This section describes the generic type concepts used by the Parameter library.

這一節描述了 Parameter 庫使用到的一般性的類型的 概念(concept)

3.1   ArgumentPack 參數包(ArgumentPack)

An ArgumentPack is a collection of tagged references to the actual arguments passed to a function. Every ArgumentPack is also a valid MPL Forward Sequence consisting of the keyword tag types in its tagged references.

參數包(ArgumentPack) 是一組 帶標籤的引用(tagged reference),它們指向傳遞給函數的真實參數。 每一個 參數包(ArgumentPack) 都是一個正確的 MPL Forward Sequence,它由 帶標籤的引用(tagged reference) 中的 關鍵字標籤類型(keyword tag type) 組成。

Requirements 約束條件

In the table below,

在下表中,

Any exceptions are thrown from the invocation of w's value will be propagated to the caller.

在計算 w 的過程中拋出的任何異常都會被繼續拋出給調用者。

ArgumentPack requirements 參數包(ArgumentPack) 的約束條件
Expression 表達式 Type 類型 Requirements 約束條件 Semantics/Notes 語義/備註

x[u]

binding<A,K>::type

x contains an element b whose keyword is K

x 包含一個元素 b,它的 關鍵字(keyword)K

Returns b's value (by reference).

通過引用的方式返回 b 的值

x[u]

binding<A,L,D>::type

none

If x contains an element b whose keyword is the same as u's, returns b's value (by reference). Otherwise, returns u's value.

如果 x 包含一個元素 b,其 關鍵字(keyword)u 的一樣, 就通過引用返回 b。反之,返回 u.

x[w]

lazy_binding<A,M,E>::type

none

If x contains an element b whose keyword is the same as w's, returns b's value (by reference). Otherwise, invokes w's value and returns the result.

如果 x 包含一個元素 b,其 關鍵字(keyword)w 的一樣, 就通過引用返回 b。反之,計算 w 並返回結果。

x, z

Model of ArgumentPack

參數包(ArgumentPack) 的模式

none

Returns an ArgumentPack containing all the elements of both x and z.

返回一個 參數包(ArgumentPack),其所有元素就包括 xz

3.2   ParameterSpec 參變量描述子(ParameterSpec)

A ParameterSpec describes the type requirements for arguments corresponding to a given keyword and indicates whether the argument is optional or required. The table below details the allowed forms and describes their condition for satisfaction by an actual argument type. In each row,

一個 參變量描述子(ParameterSpec) 描述了對於給定 關鍵字(keyword) 所需參數的類型並且 指明這個參數是 可選的(optional) 還是 必選的(required)。下表詳細列出了允許的形式並描述了當一個實際參數傳遞過來時它們必須滿足的條件。在每一行中,

ParameterSpec allowed forms and conditions of satisfaction 參變量描述子(ParameterSpec) 允許的形式以及滿足的條件
Type 類型 A required A 是否為必須的 Condition A must satisfy A 必須滿足的條件
K no 否 n/a
optional<K,F> no 否 mpl::apply<F,A>::type::valuetrue.
required<K,F> yes 是 mpl::apply<F,A>::type::valuetrue.

The information in a ParameterSpec is used to limit the arguments that will be matched by forwarding functions.

參變量描述子(ParameterSpec) 中的信息是用來 限制轉接函數(forwarding functions) 匹配到的參數的。


4   Class Templates 類模板

4.1   keyword

The type of every keyword object is a specialization of keyword.

每一個 關鍵字對像(keyword object) 的類型都是 keyword 類模板的一個特化。

定義在:boost/parameter/keyword.hpp
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=
template <class T> ArgumentPack operator=(T& value) const;
template <class T> ArgumentPack operator=(T const& value) const;
約束條件:
返回: 一個 參數包(ArgumentPack),它只包含一個 帶標籤的引用(tagged reference),其引用指向一個 關鍵字(keyword)Tag
operator|
template <class T> tagged default operator|(T& x) const;
template <class T> tagged default operator|(T const& x) const;
返回: 一個 帶標籤的默認值(tagged default),其 x 並且 關鍵字(keyword)Tag
operator||
template <class F> tagged lazy default operator||(F const& g) const;
約束條件: g() is valid, with type boost::result_of<F()>::type.2 表達式 g() 是正確的,並且其類型是 boost::result_of<F()>::type.2
返回: a tagged lazy default with value g and keyword Tag. 一個 延遲計算的帶標籤的默認值(tagged lazy default),其 g 並且 關鍵字(keyword)Tag
get
static keyword<Tag>& get();
返回: a 「singleton instance」: the same object will be returned on each invocation of get(). 一個 「單件實例」: 每次調用 get() 都會返回同一個對象。
線程安全: get() can be called from multiple threads simultaneously. get() 可以從不同的線程中被同時調用。

4.2   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 the corresponding template argument to parameters.

提供一個將傳給 轉接函數(forwarding function) 的實際參數打包成一個 參數包(ArgumentPack) 的接口,在這個 參數包(ArgumentPack) 裡面,任何一個 位置相關的(positional) 參數都會根據它們相應的模板參數被打標籤為 parameters

定義在:boost/parameter/parameters.hpp
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;

template <class A0, class A1, …class Aβ> ArgumentPack operator()(A0& a0, A1& a1, …Aβ& aβ) const;
};
約束條件: P0, P1, … Pβ are models of ParameterSpec. P0, P1, … Pβ 都是 參變量描述子(ParameterSpec) 的模式(model)。

Note 注意

In this section, Ri and Ki are defined as follows, for any argument type Ai:

在這一節中,RiKi 定義如下,對任何一個參數類型 Ai

let D0 the set [d0, …, dj] of all deduced parameter specs in [P0, …, Pβ]
D0 賦值為集合 [d0, …, dj],它是 [P0, …, Pβ] 中所有 推導的(deduced) 參變量描述子(parameter specs) 的集合

if Ai is a result type of keyword<T>::operator=
如果 Aikeyword<T>::operator= 的結果類型
then
那麼
Ki is T
KiT
else
反之
if some Aj where ji is a result type of keyword<T>::operator=
如果某個 Aj ( ji ) 是 keyword<T>::operator= 的結果類型
or some Pj in ji is deduced
或者 某個 Pj in ji推導的(deduced)
then
那麼
if some parameter spec dj in Di matches Ai
如果 Di 中的某個 參變量描述子(parameter spec) dj 匹配到了 Ai
then
那麼
Ki is dj's keyword tag type.
Di+1 is Di - [dj]
Di+1Di - [dj]
else
反之
match

A Metafunction used to remove a forwarding function from overload resolution.

一個用於將 轉接函數(forwarding function) 從 重載解析(overload resolution) 中移除的 元函數(Metafunction)

返回: 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β 是 滿足的(satisfied) (見下面), 那麼返回 parameters<P0,P1,…Pβ>。 反之, match<A0,A1,…Aβ>::type 是沒有定義的。

P0, P1, …Pβ are satisfied if, for every j in 0…β, either:

P0, P1, …Pβ 是 滿足的(satisfied) 如果,對於在 0…β 中的每一個 j,滿足以下條件之一:

  • Pj is the unspecified default
  • Pj未指定的(unspecified) 默認值
  • or, Pj is a keyword tag type
  • 或者Pj 是一個 關鍵字標籤類型(keyword tag type)
  • or, Pj is optional <X,F> and either
    • X is not Ki for any i,
    • or X is some Ki and mpl::apply<F,Ri>::type::value is true
  • 或者Pjoptional <X,F> 並且
    • 對於任何 iX 都不是 Ki
    • 或者 X 是某個 Ki 並且 mpl::apply<F,Ri>::type::valuetrue
  • or, Pj is required <X,F>, and
    • X is some Ki, and
    • mpl::apply<F,Ri>::type::value is true
  • 或者Pjrequired <X,F>,並且
    • X 是某個 Ki, 並且
    • mpl::apply<F,Ri>::type::valuetrue
operator()
template <class A0> ArgumentPack operator()(A0 const& a0) const;

template <class A0, …class Aβ> ArgumentPack operator()(A0 const& a0, …Aβ const& aβ) const;
返回:

An ArgumentPack containing, for each ai,

一個 參數包(ArgumentPack),它包含,對每一個 ai

4.3   optional, required

These templates describe the requirements on a function parameter.

這些模版描述了對一個函數參變量的約束條件。

Defined in:boost/parameter/parameters.hpp
定義在:boost/parameter/parameters.hpp
Specializations model:
 ParameterSpec
特化模式(model):
 參變量描述子(ParameterSpec)
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.

Predicate 的默認值是一個 unspecified 元函數(Metafunction),它對任何參數都返回 mpl::true_

4.4   deduced

This template is used to wrap the keyword tag argument to optional or required.

這個模版用來將 關鍵字標籤(keyword tag) 參數封裝成 optional 或者 required

Defined in:boost/parameter/parameters.hpp
定義在:boost/parameter/parameters.hpp
template <class Tag>
struct deduced;

5   Metafunctions 元函數

A Metafunction is conceptually a function that operates on, and returns, C++ types.

元函數(Metafunction) 在概念上是函數,只是它操作和返回的都是 C++ 類型。

5.1   binding

Returns the result type of indexing an argument pack with a keyword tag type or with a tagged default.

返回以 關鍵字標記類型(keyword tag type) 或者 帶標記的默認值(tagged default) 為索引,在參數包中查找到的結果類型。

Defined in:boost/parameter/binding.hpp
定義在:boost/parameter/binding.hpp
template <class A, class K, class D = void>
struct binding
{
typedef … type;
};
Requires:A is a model of ArgumentPack.
約束條件:A 是一個 參數包(ArgumentPack) 模式(model)。
Returns:the reference type of the tagged reference in A having keyword tag type K, if any. If no such tagged reference exists, returns D.
返回:A 中 其 關鍵字標籤類型(keyword tag type)K帶標籤的引用(tagged reference) 的引用類型。如果不存在這樣的 帶標籤的引用(tagged reference),返回 D

5.2   lazy_binding

Returns the result type of indexing an argument pack with a tagged lazy default.

返回以 延遲計算的帶標籤的默認值(tagged lazy default) 為索引,在參數包中查找到的結果類型。

Defined in:boost/parameter/binding.hpp
定義在:boost/parameter/binding.hpp
template <class A, class K, class F>
struct lazy_binding
{
typedef … type;
};
Requires:A is a model of ArgumentPack.
約束條件:A 是一個 參數包(ArgumentPack) 模式(model)。
Returns:the reference type of the tagged reference in A having keyword tag type K, if any. If no such tagged reference exists, returns boost::result_of<F()>::type.2
返回:A 中 其 關鍵字標籤類型(keyword tag type)K帶標籤的引用(tagged reference) 的引用類型。如果不存在這樣的 帶標籤的引用(tagged reference),返回 boost::result_of<F()>::type.2

5.3   value_type

Returns the result type of indexing an argument pack with a keyword tag type or with a tagged default.

返回以 關鍵字標記類型(keyword tag type) 或者 帶標記的默認值(tagged default) 為索引,在參數包中查找到的結果類型。

Defined in:boost/parameter/value_type.hpp
定義在:boost/parameter/value_type.hpp
template <class A, class K, class D = void>
struct value_type
{
typedef … type;
};
Requires:

A is a model of ArgumentPack.

約束條件:

A 是一個 參數包(ArgumentPack) 模式。

Returns:

the type of the tagged reference in A having keyword tag type K, if any. If no such tagged reference exists, returns D. Equivalent to:

typename remove_reference<
typename binding<A, K, D>::type
>::type

… when D is not a reference type.

返回:A 中 其 關鍵字標籤類型(keyword tag type)K帶標籤的引用(tagged reference) 的類型。如果沒有這樣的 帶標籤的引用(tagged reference) 存在,返回 D。等價於:
typename remove_reference<
typename binding<A, K, D>::type
>::type

… 當 D 不是引用類型時。


6   Code Generation Macros 代碼生成宏

Macros in this section can be used to ease the writing of code using the Parameter libray by eliminating repetitive boilerplate.

這一節中講到的宏通過提供經常使用到的模版來減輕使用 Parameter 庫時寫代碼的負擔。

6.1   BOOST_PARAMETER_FUNCTION(result,name,tag_namespace,arguments)

Defined in:boost/parameter/preprocessor.hpp
定義在:boost/parameter/preprocessor.hpp
Requires:

result is the parenthesized return type of the function. name is the base name of the function, this is the name of the generated forwarding functions. tag_namespace is the namespace in which the keywords used by the function resides. arguments is a list of argument specifiers, as defined below.

約束條件:

result 是用括號括起來的函數返回類型。 name 是函數的基名字,這是生成的轉接函數(forwarding function)的名字。tag_namespace 是函數使用的關鍵字所在的命名空間。arguments 是一組 參數描述子(argument specifiers),定義如下。

Argument specifiers syntax:
參數描述子語法:
 
argument-specifiers ::= specifier-group {specifier-group}

specifier-group0 ::= specifier-group1 |
( '(' 'deduced' specifier-group1 {specifier-group1} ')' )

specifier-group1 ::= ( '(' 'optional' optional-specifier {optional-specifier} ')' ) |
( '(' 'required' required-specifier {required-specifier} ')' )

optional-specifier ::= '(' name ',' restriction ',' default-value ')'
required-specifier ::= '(' name ',' restriction ')'

restriction ::= ('*' '(' lambda-expression ')' ) |
( '(' typename ')' ) |
'*'

name is any valid C++ identifier. default-value is any valid C++ expression. typename is the name of a type. lambda-expression is an MPL lambda expression.

name 是任何合法的 C++ 標識符。default-value 是任何合法的 C++ 表達式。typename 是類型的名字。lambda-expressionMPL lambda 表達式(MPL lambda expression)

Generated names in enclosing scope:
生成的在封閉作用域中的名字:
 
  • boost_param_result_ ## __LINE__ ## name
  • boost_param_params_ ## __LINE__ ## name
  • boost_param_parameters_ ## __LINE__ ## name
  • boost_param_impl ## name
  • boost_param_default_ ## __LINE__ ## name
Approximate expansion:
近似展開:

Where:

其中

  • n denotes the minimum arity, as determined from arguments.
  • n 表示 最小(minimum) 元數(arity),由 arguments 決定。
  • m denotes the maximum arity, as determined from arguments.
  • m 表示 最大(maximum) 元數(arity), 由 arguments 決定。
template <class T>
struct boost_param_result_ ## __LINE__ ## name { typedef result type;
};

struct boost_param_params_ ## __LINE__ ## name : boost::parameter::parameters< list of parameter specifications, based on arguments > {}; typedef boost_param_params_ ## __LINE__ ## name boost_param_parameters_ ## __LINE__ ## name;

template <class A0, …, class An>
result type name(
A0 cv& a0, …, An cv& an , typename boost_param_parameters_ ## __LINE__ ## name::match<
A0 cv, …, An cv >::type = boost_param_parameters_ ## __LINE__ ## name()
)
{
… forward to implementation … } template <class A0, …, class Am>
result type name(
A0 cv& a0, …, Am cv& am , typename boost_param_parameters_ ## __LINE__ ## name::match<
A0 cv, …, Am cv >::type = boost_param_parameters_ ## __LINE__ ## name()
)
{
… forward to implementation … } template < class ResultType , class argument name0 ## _type

, class argument namem ## _type
>
ResultType boost_param_default_ ## __LINE__ ## name(
(ResultType(*)())
, argument name0 ## _type& argument name0 … , argument namem ## _type& argument namem )

6.2   BOOST_PARAMETER_MEMBER_FUNCTION(result,name,tag_namespace,arguments)

Defined in:boost/parameter/preprocessor.hpp
定義在:boost/parameter/preprocessor.hpp

See BOOST_PARAMETER_FUNCTION(result,name,tag_namespace,arguments)

BOOST_PARAMETER_FUNCTION(result,name,tag_namespace,arguments)

6.3   BOOST_PARAMETER_CONSTRUCTOR(cls, impl, tag_namespace, arguments)

Defined in:boost/parameter/preprocessor.hpp
定義在:boost/parameter/preprocessor.hpp
Requires:

cls is the name of this class. impl is the parenthesized implementation base class for cls. tag_namespace is the namespace in which the keywords used by the function resides. arguments is a list of argument specifiers, as defined in BOOST_PARAMETER_FUNCTION(result,name,tag_namespace,arguments).

約束條件:

cls 是類的名字。impl 是用括號括起來的 cls 的實現基類。 tag_namespace 是函數使用的關鍵字所在的命名空間。arguments 是一組 參數描述子(argument specifiers),跟定義在 BOOST_PARAMETER_FUNCTION(result,name,tag_namespace,arguments) 中的一樣。

Generated names in enclosing scope:
生成的在封閉作用域中的名字:
 
  • boost_param_params_ ## __LINE__ ## ctor
  • constructor_parameters ## __LINE__
Approximate expansion:
近似展開:

Where:

其中

  • n denotes the minimum arity, as determined from arguments.
  • n 表示 最小(minimum) 元數(arity),由 arguments 決定。
  • m denotes the maximum arity, as determined from arguments.
  • m 表示 最大(maximum) 元數(arity), 由 arguments 決定。
struct boost_param_params_ ## __LINE__ ## ctor
: boost::parameter::parameters<
list of parameter specifications, based on arguments > {}; typedef boost_param_params_ ## __LINE__ ## name constructor_parameters ## __LINE__; template <class A0, …, class An>
cls(A0 const& a0, …, An const& an)
: impl(constructor_parameters ## __LINE__(a0, …, an))
{}

template <class A0, …, class Am>
cls(A0 const& a0, …, An const& am)
: impl(constructor_parameters ## __LINE__(a0, …, am))
{}

6.4   BOOST_PARAMETER_NAME(name)

Declares a tag-type and keyword object.

聲明一個 標籤類型(tag-type) 和 關鍵字(keyword) 對象。

Expands to:

展開成:

If name is of the form:

如果 name 是這樣形式:

(tag-name, namespace-name) object-name

then

那麼

namespace namespace-name
{
  struct tag-name
  {
      static char const* keyword_name()
      {
          return ##tag-name;
}

typedef implementation defined _;
typedef implementation defined _1;
};
}

::boost::parameter::keyword<tag-namespace::tag-name> const& object-name = ::boost::parameter::keyword<tag-namespace::tag-name>::instance;

Else

反之

namespace tag
{
struct name { static char const* keyword_name() { return ##name;
}

typedef implementation defined _;
typedef implementation defined _1;
};
}

::boost::parameter::keyword<tag::name> const& _name = ::boost::parameter::keyword<tag::name>::instance;

6.5   BOOST_PARAMETER_TEMPLATE_KEYWORD(name)

Expands to:

展開成:

namespace tag
{
struct name;
}

template <class T>
struct name : ::boost::parameter::template_keyword<tag::name, T>
{};

6.6   BOOST_PARAMETER_FUN(r,n,l,h,p)

Deprecated

不贊成使用

This macro has been deprecated in favor of BOOST_PARAMETER_FUNCTION.

這個宏已經過時,請使用 BOOST_PARAMETER_FUNCTION

Generates a sequence of forwarding function templates named n, with arities ranging from l to h , returning r, and using p to control overload resolution and assign tags to positional arguments.

生成一組叫作 n轉接函數(forwarding function) 模版,其元數(arity)範圍是從 lh,返回 r,使用 p 來控制 重載解析(overload resolution) 並將標籤(tag)賦給 位置相關的參數(positional argument)。

Defined in:boost/parameter/macros.hpp
定義在:boost/parameter/macros.hpp
Requires:l and h are nonnegative integer tokens such that l < h
約束條件:lh 是非負整數,且 l < h
Generates
template <class A1, class A2, …class A##l>
r name(
A1 const& a1, A2 const& a2, …Al const& xl , typename p::match<A1,A2,…Al>::type p = p())
{
return name_with_named_params(p(x1,x2,…xl));
}

template <class A1, class A2, …class Al, class A##BOOST_PP_INC(l)>
r name(
A1 const& a1, A2 const& a2, …Al const& xl , A##BOOST_PP_INC(l) const& x##BOOST_PP_INC(l)
, typename p::match<A1,A2,…Al,A##BOOST_PP_INC(l)>::type p = p())
{
return name_with_named_params(p(x1,x2,…xl,x##BOOST_PP_INC(l)));
}

template <class A1, class A2, …class Ah>
r name(
A1 const& a1, A2 const& a2, …Ah const& xh , typename p::match<A1,A2,…Ah>::type p = p())
{
return name_with_named_params(p(a1,a2,…ah));
}

6.7   BOOST_PARAMETER_KEYWORD(n,k)

Deprecated

不贊成使用

This macro has been deprecated in favor of BOOST_PARAMETER_NAME.

這個宏已經過時,請使用 BOOST_PARAMETER_NAME

Generates the declaration of a keyword tag type named k in namespace n, and a corresponding keyword object definition in the enclosing namespace.

生成在名字空間 n 中叫作 k關鍵字標籤類型(keyword tag type),和一個定義在封閉名字空間中的 關鍵字對像(keyword object)

Defined in:boost/parameter/keyword.hpp
定義在:boost/parameter/keyword.hpp
Generates
namespace n { struct k; }
namespace {
boost::parameter::keyword<tag-namespace::k>& k = boost::parameter::keyword<tag-namespace::k>::get();
}

6.8   BOOST_PARAMETER_MATCH(p,a,x)

Generates a defaulted parameter declaration for a forwarding function.

轉接函數(forwarding function) 生成默認的參變量聲明。

Defined in:boost/parameter/match.hpp
定義在:boost/parameter/match.hpp
Requires:

a is a Boost.Preprocessor sequence of the form

(A0)(A1)…(An)
約束條件:

a 是一個 如下形式的 Boost.Preprocessor 序列

(A0)(A1)…(An)
Generates
生成
typename p::match<A0,A1…,An>::type x = p()

7   Configuration Macros 配置宏

7.1   BOOST_PARAMETER_MAX_ARITY

Determines the maximum number of arguments supported by the library. Will only be #defined by the library if it is not already #defined.

設置這個庫支持的最大參數個數。只有在沒有被 定義(#defined) 時,庫才會 定義(#defined) 它。

定義在:boost/parameter/config.hpp
默認值:5

8   Tutorial 教程

Follow this link to the Boost.Parameter tutorial documentation.

點擊 這個鏈接 到 Boost.Parameter 庫的教程文檔。


[1]References to tag objects may be initialized multiple times. This scenario can only occur in the presence of threading. Because the C++ standard doesn't consider threading, it doesn't explicitly allow or forbid multiple initialization of references. That said, it's hard to imagine an implementation where it could make a difference. 標籤對像(tag object)的引用可能會被初始化多次。這種場景只有在多線程情況下才會發生。 C++ 標準沒有考慮多線程,因此它沒有顯式地允許或者禁止引用的多次初始化。也就是說,難以想像實現有什麼不同。
[2](1, 2) Where BOOST_NO_RESULT_OF is #defined, boost::result_of<F()>::type is replaced by F::result_type. (1, 2) 如果 BOOST_NO_RESULT_OF定義(#define) 過, boost::result_of<F()>::type 就等價於 F::result_type