<分区>
Possible Duplicate:
Priority when choosing overloaded template functions in C++
模板化函数让我可以方便地对各种类型进行操作:
template<typename T> void destroy(T* obj) {
delete obj;
}
但在某些时候我想对类层次结构进行一些专门化:
class Base { virtual void doSomething(); };
class Derived : public Base {};
void destroy(Base* obj) {
obj->doSomething();
delete obj;
}
如果我传递了确切的类型Base*
,预期的专用函数确实被调用,但是重载决策的规则似乎更喜欢通用模板化版本,而不是在我传递时执行静态向上转换Derived*
到 void detroy()
。
当然,我可以为所有可能的派生类型创建所有重载函数,但它的可维护性较差。
我正在使用 Visual C++ 2008,有什么办法可以解决上述问题吗?