나는 많은 파생 클래스가있는 기본 클래스를가집니다. 그러나 내 프로그램의 컨테이너에 저장된 기본 클래스에 대한 포인터이므로 가상 함수를 반복하여 호출 할 수 있습니다.파생 클래스의 팩토리 메서드에 대한 템플릿 사용
이 컨테이너에 기본 클래스 포인터를 추가하는 또 다른 클래스가 있으므로 파생 클래스가 new
ed (누드이 아님) 일 때 반환하거나 기본 클래스 포인터로 저장해야합니다.
사용하여 템플릿 :
template<class T> //T is the derived class
static T* Factory(){
return static_cast<T*>(functionThatAddsBaseClassPointerToContainer(new T));
}
나는 두 가지 장점/단점 참조 :
가 장점 : 할 필요가 없습니다를 파생 클래스마다이 값을 무시하십시오.
단점 : T
내베이스에서 파생되지 않은 클래스 유형을 전달하면 잘못 사용될 수 있습니다.
이 함수 내에서 T
을 파생시킬 수있는 방법이 있습니까? Factory
? 또는 컴파일러가 T
이 파생되지 않은 인스턴스를 잡을 것으로 기대할 수 있습니까?
이 일반적인 접근 방식은 수용 가능한 아이디어입니까 아니면 더 좋은 대안이 있습니까?
'T *'를 반환하는 함수가 필요하지 않습니다. 'BaseType * '을 반환하지 않겠습니까? – juanchopanza
@juanchopanza 왜냐하면 파생 클래스에서 함수를 호출하기를 원하기 때문에 파생 클래스에 대한 포인터와 컨테이너가 가상 기본 클래스 함수를 반복 할 때 수행 할 작업이 필요합니다. – johnbakers