テンプレートの引数が関連している場合、あるオブジェクトを別のオブジェクトにキャストできるようにクラステンプレートを実装できますか?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;
ここでの付加的な問題は、fooがT &とT *を返す関数を含むインターフェースとして使用される抽象クラスであるということですので、私:ここでの考え方を示すためexapleがある(もちろん、それはコンパイルされません)テンプレートコピーコンストラクタを実装できません。
std::list<Derived> l;
MyIterator<Base> it(l.begin());
UPD:
私はそれが多型になりたい消去を入力するために、任意のSTLのイテレータを保持し、ほかにできるユニバーサルイテレータクラスを書いている、つまり、私はこのような何かを書くことができますそれは私の間違いでしたが、MyIteratorを実装するためにFoo *にFoo *をキャストする必要は実際にはありませんでした。
私は 'dynamic_cast'があなたがここでしたいことをすることを非常に疑っています。 – aschepler
あなたは正しいです、それはNULLを返しています:) – lizarisk