Search

2011年9月29日 星期四

有別於C++ Templates - The Complete Guide上的靜態多型



#include <iostream>

template<typename T>
class Base
{
   public:
      void Print();
      void Try(){
T *obj = static_cast<T*>(this);
obj->Print();
      }
};

class D1:public Base<D1>
{
   public:
      void Print(){std::cout << "D1" << std::endl;}
};

class D2:public Base<D2>
{
   public:
      void Print(){std::cout << "D2" << std::endl;}
};

int main(int argc,char**argv)
{
   D1 d1;
   D2 d2;

   d1.Try();
   d2.Try();

   return 0;
}


跟C++ Templates - The Complete Guide第十四章的靜態多型一樣,都是依靠傳入的template argument型別來決定,然後今天早上看到這篇才又想起來,基本上優缺點跟十四章的靜態多型一樣,不過寫成Class Template繼承體系又多了可以把實作跟介面分開的優點,書上是做Function Template。