21 C語言和設計模式(之模板模式)

2021-09-30 11:41:26 字數 1519 閱讀 1410

模板對於學習c++的同學,其實並不陌生。函式有模板函式,類也有模板類。那麼這個模板模式是個什麼情況?我們可以思考一下,模板的本質是什麼。比如說,現在我們需要編寫乙個簡單的比較模板函式。

[cpp]view plain

copy

template

<

typename

type>  

intcompare (type a, type b)  

模板函式提示我們,只要比較的邏輯是確定的,那麼不管是什麼資料型別,都會得到乙個相應的結果。固然,這個比較的流程比較簡單,即使沒有採用模板函式也沒有關係。但是,要是需要拆分的步驟很多,那麼又該怎麼辦呢?如果相通了這個問題,那麼也就明白了什麼是template模式。

比方說,現在我們需要設計乙個流程。這個流程有很多小的步驟完成。然而,其中每乙個步驟的方法是多種多樣的,我們可以很多選擇。但是,所有步驟構成的邏輯是唯一的,那麼我們該怎麼辦呢?其實也簡單。那就是在基類中除了流程函式外,其他的步驟函式全部設定為virtual函式即可。

[cpp]view plain

copy

class

basic  

virtual

~basic() {}  

virtual

void

step1() {}  

virtual

void

step2() {}  

void

process()  

};  

basic的類說明了基本的流程process是唯一的,所以我們要做的就是對step1和step2進行改寫。

[cpp]view plain

copy

class

data_a : 

public

basic  

~data_a() {}  

void

step1()   

void

step2()  

};  

所以,按照我個人的理解,這裡的template主要是一種流程上的統一,細節實現上的分離。明白了這個思想,那麼用c語言來描述template模式就不是什麼難事了。

[cpp]view plain

copy

typedef

struct

_basic  

basic;  

因為在c++中process函式是直接繼承的,c語言下面沒有這個機制。所以,對於每乙個process來說,process函式都是唯一的,但是我們每一次操作的時候還是要去複製一遍函式指標。而step1和step2是不同的,所以各種方法可以用來靈活修改自己的處理邏輯,沒有問題。

[cpp]view plain

copy

void

process(

struct

_basic* pbasic)    

C語言和設計模式(之模板模式)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!模板對於學習c 的同學,其實並不陌生。函式有模板函式,類也有模板類。那麼這個模板模式是個什麼情況?我們可以思考一下,模板的本質是什麼。比如說,現在我們需要編寫乙個簡單的比較模板函式。template intcompare type a,type b...

C語言和設計模式(模板模式)

當執行某個流程時,各個子流程如果有多種實現方式,可以編寫乙個模板函式放在主流程裡,具體實現可以隨時替換 模板對於學習c 的同學,其實並不陌生。函式有模板函式,類也有模板類。那麼這個模板模式是個什麼情況?我們可以思考一下,模板的本質是什麼。比如說,現在我們需要編寫乙個簡單的比較模板函式 templat...

C語言和設計模式(之模板模式) 05

模板對於學習c 的同學,其實並不陌生。函式有模板函式,類也有模板類。那麼這個模板模式是個什麼情況?我們可以思考一下,模板的本質是什麼。比如說,現在我們需要編寫乙個簡單的比較模板函式。cpp view plain copy template typename type intcompare type ...