星期日, 7月 30, 2006

看完

昨天躺在床上,心生無聊,就把有趣的"泛型程式設計與STL"看完了一次,現在對STL總算有一個初步的認識了..我對bind1st, bind2nd, compose感到神奇,但是我看到更讓我覺得神奇的東西Member Function Adaptors


在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 是物件導向程式和泛型程式設計之間的橋樑

那麼事實上,Member Function Adapptor是一個轉換器(這句話是廢話,因為這就是adaptor要做的事),但是可以利用polymorphism性質來做一個轉換,以達到更大的彈性,這也是有一個神奇又有趣的東西,哈

那麼為什麼不能直接使用class member function,我猜的理由是,function pointerclass member function pointer是不一樣的,也就是說,無法那麼順利的當argument(看來我的講述功力真差..Orz)

看完不代表會用,所以接近開學的時候,我會再把這本書翻一次吧,開學後就可以開始使用STL來試著開發了,速度慢,但是總比沒開始的好
---
睡前還看不懂的,睡一覺就了解在幹麻了,真是神奇

3 則留言:

匿名 提到...

應該有兩個原因:

1. reusability
2. adaptability

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

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

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


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

yen3 提到...

好像懂又好像沒懂...

再把書的相關處再看一次好了

yen3 提到...

驚,有意外訪客來...有人提醒才發現...謝謝謝謝,現在看的懂一半了,等我word排版,會繼續努力看懂