テンプレート化された関数を使用すると、さまざまな型を簡単に操作できます。
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 を使用していますが、上記の問題を回避する方法はありますか?