Function Adapter(函數適配器)算法
所謂「函數適配器」是可以將仿函數和另一個仿函數(或某個值,或某一個通常函數)結合起來的仿函數。函數適配器聲明於中。
預約義的仿函數函數適配器函數
表達式 效果
bind1st(op,value) op(value,param)
bind2nd(op,value) op(param,value)
not1(op) !op(param)
not2(op) !op(param1,param2)
bind1st()
bind1st將一個二元仿函數(例如greater<>)轉換爲一個一元仿函數。它一般將第二個參數傳給「由第一參數指出」的二元仿函數,做爲後者的第一個參數。
bind2nd()
bind2nd將一個二元仿函數(例如greater<>)轉換爲一個一元仿函數。它一般將第二個參數傳給「由第一參數指出」的二元仿函數,做爲後者的第二個參數。
針對成員函數而設計的函數適配器
表達式 效果
mem_fun_ref(op) 調用op,那是某對象的一個const成員函數
mem_fun(op) 調用op,那是某對象指針的一個const成員函數
之因此須要針對成員函數而設計的函數適配器,那是由於不可能直接把一個成員函數傳遞給一個算法,例如:設計
for_each(col.begin(),col.end(),&Person::print);
//ERROR:can not call operator() for a member function pointer
問題在於for_each()會針對第三個參數傳進來的指針,調用operator(),而不是調用該指針所指的成員函數。因此經過適配器mem_fun_ref將operator()調用動做進行適當轉換,就解決了這個問題。
注意:mem_fun_ref和mem_fun調用的函數必須是const。指針
針對通常函數(非成員函數)設計的函數適配器
表達式 效果
ptr_fun(op) op(param)、op(param1,param2)對象