可能重复:
在 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,有没有办法解决上述问题?