星期日, 8月 06, 2006

member function adaptor 與 google

哈哈哈,事實上,經過那麼多天,我還是沒啥長進,就好像是原始的認知中前進一點點,算了,先看之前書上的說法吧


泛型程式設計與STL p.403
所謂的member function adaptors是一群小型的classes,讓你能夠獎member functions 當做function objbects來呼叫。每一個adaptor需要一個型別為X*或X&的引數,可透過該引數呼叫X的一個member function,如果那是一個virtual member function,那麼便是一個多型的函式呼叫(polymorphic function call)。因此,member function adaptors 是物件導向程式和泛型程式設計之間的橋樑


嗯,其後我又寫了
那麼為什麼不能直接使用class member function,我猜的理由是,function pointer和class member function pointer是不一樣的


老實說,我覺得這真的是一個很爛的理由...於是在回文中John解釋了
john 提到...
應該有兩個原因:
1. reusability
2. adaptability

member function有兩種呼叫方式: ->* 以及 .*

而 algorithm 接受一個 functor 應該作最少的假設, 也就是它們都能一致使用operator() 呼叫就好了, 不然就得分別替這些演算法, 再額外實作出 ->* 及 .*的版本, 累嗎?

另一個是配接能力, STL 之所以能夠配接是因為每個 functor 裡面都有定義內嵌的xxxx_argument_type 跟 result_type但 (member) function 不能作這些定義把它們包起來就能迂迴達成

bind, compose 應該算是同一概念: partial function application (currying)


到目前為止,我只看懂一半吧,大概能了解為什麼,但是,不能做這些定義把們包起來就能迂迴達成,我想Josh Ko昨天半夜給我的文件(by himself)做了很好的解釋
Josh Ko writes
member function adapter除了加上ADTU(Auto-Deducing Type Units)之外,也將那個隱喻的this指標引數轉為一般的引數(當然,只是比較淺層的語法轉換)

整篇文章是圖文並茂,我不太會做引用(笑)

那麼跟google有什麼關係? 因為我不認識John解釋給我聽的強者人物,我想了想,google打上member function adaptor,只搜尋繁體中文網頁結果,出現了有趣的現象,
第一個,jjhou的STL五篇文章之一,嗯,可理解
第二個,葉秉哲的C++程式設計語言經典本中英術語對照表,嗯,可理解
第三個,Sun的document,嗯,可理解
第四個,我的blog,這....................................

我明明什麼都沒有寫啊....這或許也是John會留言的原因,此外有時候會感嘆,資訊的provider和getter數量總是有差的,而且provider會越來越少,但是,總是會有默默無名的好心人出現(如John, Josh Ko),讓我們更了解

我所能做的,就是努力了解,讓自己更早成為一個proivder回報以前給我成長的provider

---
這篇真長.Orz

張貼留言