可能重複:
Priority when choosing overloaded template functions in C++C++函數重載解析關於模板類型和類層次結構
模板化的功能讓我有方便的多種類型的操作:
template<typename T> void destroy(T* obj) {
delete obj;
}
但是在某些時候,我想對類層次結構進行一些專門化處理Y:
class Base { virtual void doSomething(); };
class Derived : public Base {};
void destroy(Base* obj) {
obj->doSomething();
delete obj;
}
,如果我一通確切類型Base*
預期的專業化功能也被調用,但是重載解析規則似乎更喜歡的,而不是執行靜態起來投通用模板版本,如果我一通Derived*
到void detroy()
。
當然,我可以爲所有可能的派生類型製作所有的重載函數,但它不易維護。
我使用的是Visual C++ 2008,有沒有解決上述問題的方法?
剛剛發現堆棧溢出同樣問題的一個簡潔的答案:[優先選擇C++中的重載模板函數](http://stackoverflow.com/questions/1332678/priority-when-choosing-overloaded-template-functions -in-c) – 2010-09-08 08:46:57
但是你的破壞函數有問題。它將被調用一維數組類型,你可以登陸做'刪除'而不是'delete []'這是未定義的行爲。 – Chubsdad 2010-09-08 09:02:49
Op承認這個Q應該作爲一個副本來關閉。 – 2011-12-04 06:34:47