#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。