function object研究之五

2021-08-26 06:46:24 字數 1496 閱讀 7272

boost提供了從_1到_9的佔位符。具體定義如下:

boost::arg<1> _1;

boost::arg<2> _2;

boost::arg<3> _3;

boost::arg<4> _4;

boost::arg<5> _5;

boost::arg<6> _6;

boost::arg<7> _7;

boost::arg<8> _8;

boost::arg<9> _9;

template< int i > struct arg

template< class t > arg( t const & /* t */ )

};template< int i > bool operator==( argconst &, argconst & )

template< int i > struct is_placeholder< arg>;};

template< int i > struct is_placeholder< arg(*) () >;};

template< class t > struct is_placeholder

;};

說明:1.is_placeholder模板函式主要用來設定value值,如果模板引數t不是arg型別,則設定為0.下面的**是z變數的值就是9.而q變數的值就是0,因為string不是arg型別。

2.利用陣列的初始化長度不能小於0,來做編譯期檢測。比如:如果表示式計算結果為-1,也就是char a[-1],則編譯器會報錯。上面**的typedef就採用了這種機制。這也說明==,?:操作符都是可以在編譯期間求值的。

int z = boost::is_placeholder>::value;

int q = boost::is_placeholder::value;

boost::arg<1> arg1(_1);//編譯通過,因為_1是佔位符

string str;

boost::arg<1> arg2(str);//編譯不通過,因為str不是佔位符

/usr/src/boost_1_47_0/boost/bind/arg.hpp: in constructor 『boost::arg::arg(const t&) [with t = std::basic_string, int i = 1]』:

in file included from /usr/src/boost_1_47_0/boost/bind/bind.hpp:29:0,

from /usr/src/boost_1_47_0/boost/bind.hpp:22,

from main.cpp:12:

main.cpp:59:27: instantiated from here

/usr/src/boost_1_47_0/boost/bind/arg.hpp:37:22: error: size of array is negative

function object研究之一

function object首先是乙個類,它實現了函式呼叫操作符t operator t t可以是void型別。class a void operator int x cout x 0通過檢視for each的源 可以觀察到stl中使用function object的基本特徵。下面是gcc4.6....

function object研究之一

function object首先是乙個類,它實現了函式呼叫操作符t operator t t可以是void型別。class a void operator int x cout x 0通過檢視for each的源 可以觀察到stl中使用function object的基本特徵。下面是gcc4.6....

function object研究之四

在前面介紹了function object是stl演算法的主要使用方式。如果能將現有的函式指標,函式,成員函式等等都封裝成function object,就可以獲得stl演算法的支援,而且可以減少專門編寫function object的工作量。基本思路仍然是構造乙個function object,內...