가능한 중복 :
Priority when choosing overloaded template functions in C++C++ 함수 오버로드 확인
템플릿 기반 기능은 나에게 종류의 다양한에서 작동하도록 편의를 제공합니다 :
template<typename T> void destroy(T* obj) {
delete obj;
}
을
하지만 어느 시점에서 나는 클래스 계층 구조에 대한 전문화를 원합니다. Y는 :
I, A는 정확한 유형Base*
을 전달하는 경우 의도 된 전문 기능이 호출 않았다
class Base { virtual void doSomething(); };
class Derived : public Base {};
void destroy(Base* obj) {
obj->doSomething();
delete obj;
}
그러나 오버로드 확인의 규칙 대신 정전기 캐스트를 수행하는 일반 템플릿 버전을 선호하는 것 같다 내가 패스 Derived*
에있는 경우 void detroy()
.
확실히 모든 가능한 파생 형식에 대해 모든 오버로드 된 함수를 만들 수 있지만 유지 관리가 쉽지 않습니다.
Visual C++ 2008을 사용하고 있는데 위와 같은 문제가 발생합니까?
[C++에서 오버로드 된 템플릿 함수를 선택할 때 우선 순위] (http://stackoverflow.com/questions/1332678/priority-when-choosing-overloaded-template-functions) 스택 오버플로에서 같은 문제에 대한 깔끔한 대답을 발견했습니다. -in-c) –
그러나 파괴 기능에 문제가 있습니다. 그것은 1D 배열 타입에 대해서도 호출 될 것이고, 정의되지 않은 동작 인 'delete []'대신에 'delete'를 수행 할 수 있습니다. – Chubsdad
작전 본부는이 Q가 복제물로 폐쇄되어야한다고 인정합니다. –