標題頁 / 元函數 / 合成與參數綁定 / bind

bind

摘要

template< 
typename F
>
struct bind0
{
// unspecified // ... }; template< typename F, typename A1 > struct bind1 { // unspecified // ... }; ... template< typename F, typename A1,... typename An
>
struct bindn { // unspecified // ... }; template< typename F , typename A1 = unspecified ... , typename An = unspecified > struct bind { // unspecified // ... };

描述

bind 是一個高階基本模板,用於 元函數類 合成和參數綁定。本質上,它是 Boost.BindBoost.Lambda 庫所提供的運行期功能在編譯期中的對應物。

頭文件

#include <boost/mpl/bind.hpp>

Model of

元函數類

參數

參數 要求 描述
F 元函數類 執行綁定的元函數類
A1,... An 任意類型 綁定的參數

表達式語義

對於任意 元函數類 f 以及任意類型 a1,... an:

typedef bind<f,a1,...an> g;
typedef bindn<f,a1,...an> g;
返回類型: 元函數類
語義:

等價於

struct g
{
template<
typename U1 = unspecified ... , typename Un = unspecified > struct apply : apply_wrapn<
typename h0<f,U1,...Un>::type
, typename h1<a1,U1,...Un>::type
... , typename hn<an,U1,...Un>::type
>
{
};
};

其中 hk 等價於

template< typename X, typename U1,... typename Un > struct hk
    : apply_wrapn<X,U1,...Un>
{
};

如果 fak 是一個 綁定表達式佔位符,否則為

template< typename X, typename U1,... typename Un > struct hk
{
    typedef X type;
};
      

[注:bind<f,a1,...an> 中第 n 次出現的 匿名佔位符 將被替換為帶數字的佔位符 _n注完]

例子

struct f1
{
template< typename T1 > struct apply { typedef T1 type; }; }; struct f5 { template< typename T1, typename T2, typename T3, typename T4, typename T5 > struct apply { typedef T5 type; }; }; typedef apply_wrap1<
bind1<f1,_1>
, int
>::type r11;

typedef apply_wrap5<
bind1<f1,_5>
, void,void,void,void,int
>::type r12;

BOOST_MPL_ASSERT(( is_same<r11,int> ));
BOOST_MPL_ASSERT(( is_same<r12,int> ));

typedef apply_wrap5<
bind5<f5,_1,_2,_3,_4,_5>
, void,void,void,void,int
>::type r51;

typedef apply_wrap5<
bind5<f5,_5,_4,_3,_2,_1>
, int,void,void,void,void
>::type r52;

BOOST_MPL_ASSERT(( is_same<r51,int> ));
BOOST_MPL_ASSERT(( is_same<r52,int> ));

參見

合成與參數綁定, 調用, 佔位符, lambda, quote, protect, apply, apply_wrap