看完
昨天躺在床上,心生無聊,就把有趣的"泛型程式設計與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 pointer
和class 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)
好像懂又好像沒懂...
再把書的相關處再看一次好了
驚,有意外訪客來...有人提醒才發現...謝謝謝謝,現在看的懂一半了,等我word排版,會繼續努力看懂
張貼留言