STL,Loki和Boost中Functor的比較(-)

16 views
Skip to first unread message

EricWang

unread,
Jan 4, 2007, 9:42:24 AM1/4/07
to compus.lang.c++.modern

av

unread,
Jan 4, 2007, 1:42:58 PM1/4/07
to compus.lang.c++.modern
連結中只有 STL 與 Loki 的,猜想應該是 boost
的還沒寫好.
這幾個我都用過,我個人的經驗是,不用考慮,直接用
boost 吧! 什麼功能都有,彈性強大,太好用了!
你可以把有 10 個參數的的 function 透過 bind
任意指定其中幾個而成為另一個 boost function(也就是
functor),甚至連順序都可以改變.
我自己在公司的 code 裡用 boost function
來做為非同步的錯誤處理 call back
機制,相當好用,也大大降低了 component 之間的耦合性.

milo...@mail2000.com.tw

unread,
Jan 4, 2007, 8:42:43 PM1/4/07
to compus.lang.c++.modern
請教一下,
如果說要使用boost的話,那要不要針對它的source
code拿來看,
或者是說有沒有什麼不錯的書可以推薦,
以便可以透過這本書的幫助而學習使用boost?
天瓏書局有一些相關的原文書,是在教怎麼使用boost的,
但一時之間,自己也不知道到底用要用那本書比較適合初階者。
謝謝。

av

unread,
Jan 5, 2007, 1:01:57 AM1/5/07
to compus.lang.c++.modern
我認為 boost 的 function / bind 這對組合的 source code
實在是不容易看懂,太辛苦了,比較重要的還是了解怎麼用。介紹
boost 那本書我沒看過(我有點想找人合寫個介紹 boost
的中文書),我自己都是看 boost 網站的 online document 的.
這邊順便寫個範例,回應我前一篇講的 "透過 bind

任意指定其中幾個而成為另一個 boost function(也就是
functor),甚至連順序都可以改變.
例如,原來有個 function:
void f(int , int, char, char, float, float, string, string);
你可以:
function<void(int , int, char, char, float, float, string, string)> f1
= f; // 宣告一個 boost function, 用法與 ff( ) 完全一樣.
function<void(int , int, char, char)> f2 = bind(ff, _1, _2, _3, _4, 0,
0, "av1", "av2"); // 型別為 void (int, int, char, char) 的
function, 使用時會呼叫 f( ), 其 f( )的中第 5, 6, 7, 8
個參數的值被固定為 0, 0, "av1", "av2".
function<void(int , char, float, string)> f3 = bind(ff, _1, -3, _2,
'a', _3, 3.1416, _4, "av"); // 型別為 void (int, char, float,
string) 的 function, 使用時會呼叫 f( ), 其中 ff( )的第 2, 4,
6, 8 個參數的值被固定為 -3, 'a', 3.1416, "av".
function<void(string, float, char, int)> f4 = bind(ff3, _4, _3, _2,
_1); // 型別為 void (string, float, char, int) 的
function,使用時會呼叫 f3( ),其實就是把 f3( )
原來的參數呼叫順序倒過來而已。而 f3( ) 又會呼叫 f(
), 且將它的第 2, 4, 6, 8 個參數的值被固定為 -3, 'a',
3.1416, "av".
使用範例:
呼叫 f3("avhacker", 2.71828183, 'z', 99);
相當於底下這個呼叫
f(99, -3, 'z', 'a', 2.71828183, 3.1416, "avhacker", "av");

當然,連 member function 也可以這樣玩,而且不必要是
static member function,相當的好用。

av

unread,
Jan 5, 2007, 1:26:35 AM1/5/07
to compus.lang.c++.modern
不好意思,發現前篇文有些地方的 f 按到兩次,變 ff
~_~.

av

unread,
Jan 5, 2007, 1:32:54 AM1/5/07
to compus.lang.c++.modern
哇咧,烏龍不止一個,最後面寫的 f3("avhacker",
2.71828183, 'z', 99);
應該是呼叫 f4("avhacker", 2.71828183, 'z', 99); 才對.

av

unread,
Jan 5, 2007, 2:03:59 AM1/5/07
to compus.lang.c++.modern
我已經將上面的說明重新排版整理,放在
http://tw.myblog.yahoo.com/avhacker/article?mid=29&prev=-1&next=27
在那邊我可以直接編修,比較方便.

OOD Tsen

unread,
Jan 18, 2007, 12:54:45 AM1/18/07
to compus.lang.c++.modern
只想問一個簡單的問題

什麼時候需要用Functor而不用Function ?

Reply all
Reply to author
Forward
0 new messages