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,內...