是否有可能以某種方式實現類模板,即如果一個對象的模板參數相關,則可以將其轉換爲另一個對象?這裏是一個的exaple顯示的想法(當然它不會編譯):如何在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 *功能的接口一個抽象類,所以我不能實現模板拷貝構造函數。
我正在寫一個通用的迭代器類可以保存任何STL迭代器,並且除了類型擦除我想它是多態的,即我可以寫這樣的事:
std::list<Derived> l;
MyIterator<Base> it(l.begin());
UPD :這是我的錯誤,我實際上並不需要將Foo *轉換爲Foo *來實現MyIterator,所以我認爲這個問題不再是現實。
我非常懷疑'dynamic_cast`會做你想在這裏。 – aschepler 2011-02-05 18:21:59
糟糕!你是對的,它返回NULL :) – lizarisk 2011-02-05 18:27:24