看板 NTTU_CSIE97 關於我們 聯絡資訊
Generic Programming (簡稱GP) ─────────────────────────────────────── 寫程式的時候,其實很容易遇到一直在寫類似的程式碼的情況,尤其是函式的實作幾乎 一模一樣,只是參數不同而已。為了解決這種問題,我們需要盡量讓演算法和參數分離, 想辦法重複利用演算法,基於一個範本(Template)上將參數多型(Parameter Polymorphism ),就稱為 GP。(最有名的就是 C++ 的STL[1]) JJLI 在上C語言有舉過一個例子: #define max(a, b) ((a)>(b) ? (a) : (b)) 這是用巨集(Marco)來實現演算法重用,可惜,這樣的做法不能保證型別的安全,而 C++ 的 範本(Template)則可以有效的兼顧型別安全。 -- C++ Template版本 -- template<typename T> T max(T a, T b) { return (a>b) ? a : b; } 至於呼叫方式,只要給它型別就好: int a(3), b(4); max<int>(a, b); [1] Standard Template Library ※ --------- 這樣就是 Generic Programming 的概念,是不是超簡單 XD? ---------- 接著複雜一點,你覺得函數也可以像這樣 generic 嗎? 答案是 OK!因為函數指標也可以當作資料型別 ^_^ 用 STL 來舉個例子: template<class Iterator, class Act, class Verify) void func(Iterator begin, Iterator end, Act a, Verify v) { for(; begin != end; begin++) { if(v(*begin)) a(*begin); } } -- 上面的 Template 可以用於判斷某個情況做出反應 -- 例如:判斷一個人是否虛情假意 bool isFake(string name) { return (name == "yuan") || (name == "COB") } void printFake(string name) { printf("%s is 虛情假意 boy", name); } int main(int argc, char** argv) { func(istream_iterator<string>(cin), istream_iterator<string>(), printFake, isFake); return 0; } 程式執行後,你可以打入字串,如果是 yuan or COB,就會顯示囉! (程式沒有測試,有缺啥請自己補 XD) 當然,你可以傳入不同的函式,就可以有不同的結果,是不是很有趣 ^_^ ──────────────────────────────────────── 複習一下C++,如果有錯,請提醒我 ^^ ps.用 BBS 打程式碼有點麻煩,本來想打一系列,好像已經開始厭倦了... --
jpgif617:讚!給GP...XD 不過 macro 應該是用 #define PORT 23 02/11 00:59
修正囉, thanks, 沒看過這 ID,是學弟嗎? ※ 編輯: lindo0130 來自: 140.96.76.40 (02/22 11:12)