??? 接口,通俗的來說就是定義了一組要實現(xiàn)的功能,這些功能被表現(xiàn)為一組函數(shù),
這些函數(shù)在語義上給定接口實現(xiàn)類的責(zé)任。
??? C++中常用的定義接口的方法是純虛類。但是定義的函數(shù)卻是要確定操作類型的
但是從接口在語義上的考慮,其實是不需要的。
??? 用模板技術(shù)來改變。
??? 定義一個接口類,在類中只定義接口函數(shù),這些函數(shù)是Client要使用的,這個
類是一個模板類,如下
??? template< typename T >
??? class Interface
??? {
??? public:
??????? template< typename T1 >
??????? void Fun( const T &t );
???
??????? ......
??? };
??? 這種方式解決了接口函數(shù)被類型限制。
??? 模板類的參數(shù)是一個繼承類,這個繼承類完成實際的操作。實體類的定義如下
??? class C : public Interface< C >
??? {
??????? ......
??? };
??? 子類去一個個的實例話其實很不好,也不符合一般C++的編程方法。由于在模板
編程的情況下,更注重的是語義的符合,所以可以在子類中使用重載的方法去實現(xiàn)對
不同類型的實際處理(畢竟沒有類的編寫者知道自己這個類要處理的類型)。那么可
以載接口類中寫些代碼,來調(diào)用子類的函數(shù),這種調(diào)用實際上在語義上定義了子類要
實現(xiàn)的責(zé)任。上面的接口的定義變成下面這個樣子
??? template< typename T >
??? class Interface
??? {
??? public:
??????? T* This( void ) { return static_cast< T* >( this ); }
??????? template< typename T1 >
??????? void Fun( const T &t )
??????? {
??????????? this->This()->Ope( t );
??????? }
???
??????? ......
??? };
???
??? 這樣,子類只用實現(xiàn)對不同類型的處理的Ope函數(shù)了,對外的公共接口還是一樣的。
顯現(xiàn)中要講基類編程子類的友員,Ope定義在protected或private作用域中。??
posted on 2007-01-13 18:06
walkspeed 閱讀(2287)
評論(0) 編輯 收藏 引用