多態的靜態綁定(CRTP手法)

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

相關文章
相關標籤/搜索