템플릿 매개 변수가 관련된 경우 한 개체를 다른 개체로 캐스팅 할 수있는 방식으로 클래스 템플릿을 구현할 수 있습니까?C++에서 템플릿 클래스 공분산을 구현하는 방법은 무엇입니까?
struct Base {};
struct Derived : Base {};
template <typename T> class Foo {
virtual ~Foo() {}
virtual T* some_function() = 0;
};
Foo<Derived>* derived = ...;
Foo<Base>* base = derived;
여기에 또 다른 문제는 푸 T & 및 T *를 리턴하는 함수를 포함하는 인터페이스로 사용되는 추상 클래스는 것을, 그래서 I : 여기에 아이디어를 보여줄 수있는 exaple이다 (물론 그것은 컴파일되지 않습니다) 템플릿 복사 생성자를 구현할 수 없습니다.
std::list<Derived> l;
MyIterator<Base> it(l.begin());
UPD :
나는 그것이 다형성 싶습니다 삭제를 입력 할 수있는 STL 반복자를 개최하고, 추가 할 수있는 보편적 인 반복자 클래스를 쓰고 있어요, 즉 I는 다음과 같이 쓸 수있다 그건 내 실수 였고, MyIterator를 구현하기 위해 Foo *에 Foo *를 캐스팅 할 필요가 없었기 때문에 더 이상 문제가 아닌 것으로 생각합니다.
나는 'dynamic_cast'가 당신이 원하는 것을 할 것이라고 대단히 의심합니다. – aschepler
죄송합니다. 당신 말이 맞아요, 그것은 NULL을 돌려주고 있어요 :) – lizarisk