Curiously Recurring Template Pattern (CRTP手法)函數
原理很簡單性能
經過模板函數 的強制轉換調用子類同名函數,來模擬多態的動態綁定,實現和虛函數同樣的功能,而且避免了動態綁定所帶來的性能開銷this
template <class T> class A { public: void func(){ ((T*)this)->funcImpl(); }; void funcImpl(){} }; class B:public A<B> { public: void funcImpl(){ cout << __FUNCTION__ << endl; } }; int main(int argc, char *argv[]) { A<B> *a = new B; a->func(); system("pause"); return 0; }
雖然模擬了一部分場合的虛函數的功能,但也不能徹底替代虛函數來實現多態,由於這是模板,子類類型早已經決定了,有點相似語法糖code