利用模板實現動態的繼承體系 (轉)

amyz發表於2007-11-25
利用模板實現動態的繼承體系 (轉)[@more@]

/* Loki學習之-----動態的繼承體系
 *
 * 傳說中的動態繼承.透過模板實現,在實際生成時才真正指定父類.
 * 以下是一個簡單演示,只有一個模板引數,在實際應用中,透過多個模板引數的運用,能夠產生極其強大的功能.
 * 
 */
#include

class Base1
{
public:
  Base1()
  {
  std::cout< }
};

class Base2
{
public:
 Base2()
  {
  std::cout< }
};

template < class Base > class Derive:public Base//關鍵點,Base是一個模板引數
{
public:
  Derive()
  {
  std::cout<  }
};

int main()
{
  Derive d1;
  Derive d2;
}

// 輸出結果 : 
// Base1::Base1()
// Derive::Derive()
// Base1::Base2()
// Derive::Derive()

/*
 * 可以看到,指定不同的模板引數,實際上導致Derive類的父類發生了變化.(d1:Base1--&gtd2:Base2)
 * 實際上,藉助於模板功能,不僅僅能實現動態繼承,還可以動態確定具體類成員變數,比如在class Derive的實現中,寫下如下程式碼:
*/
 template < class Base > class Derive
 {
  Base base_;
 public:
  Derive()
  {
  std::cout<  }
 }
 在 int main() 中:
 Derive d1; 則 base_ 是class Base1的一個例項
 Derive d2; 則 base_ 是class Base2的一個例項

/* 顯然在建立Derive的例項時,才會確定base成員變數的型別(Base1或者Base2).
 *
 * 在實際的開發中,動態繼承和動態確定成員變數型別意義重大.比如,藉助於動態繼承的靈活性,Loki透過4個模板引數,就實際實現了
 * 大約300個各具特色的智慧指標.stl中,透過動態指定成員變數型別Allocator,實現了Vector等容器的分配的可性,
 * 透過指定不同的Allocator,實際生成的容器物件便有了不同的,以及其它一些特性.
 */
 本文是本人學習<>時的一點感受,寫出來與大家交流,歡迎各位指正.
 本人是十成的C++ Fans,希望與大家多多交流.
 to:dyunze2002@sina.com.cn">dyunze2002@sina.com.cn
 -5-5

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984587/,如需轉載,請註明出處,否則將追究法律責任。

相關文章