我意識到,這個代碼編譯和工作原理:
#include <iostream>
template<class Something> class Base {
public:
Base() {
}
virtual ~Base() {
}
virtual void method() = 0;
};
class Derived: public Base<std::string> {
public:
Derived() {
}
virtual ~Derived() {
}
void method() {
}
};
template<class Something> class TemplatedClass {
public:
void method(Base<Something>* base) {
}
};
class SomeClass: public TemplatedClass<std::string> {
};
int main(int argc, char **argv) {
Derived* d = new Derived();
Base<std::string>* b = d;
Base<std::string>* b1 = dynamic_cast<Base<std::string>*>(d);
Base<std::string>* b2 = static_cast<Base<std::string>*>(d);
SomeClass sc;
sc.method(b);
sc.method(b1);
sc.method(b2);
}
然後,我在做一個非常大的錯誤,準備骨架,甚至試圖理解我自己的代碼。多可惜!!!對不起...這是一個非常糟糕的問題。這將是更好地將其刪除...
**沒有意義的問題,下面的代碼** 有鑑於此:
template<class Something> class Base
{
virtual void method() = 0;
};
class Derived: public Base<std::string>
{
void method() { ... };
};
我想的Derived
指針向下轉換的Base
的指針。我試圖用dynamic_cast
沒有成功:
...
Derived* d = new Derived();
Base* b = dynamic_cast<Base*>(d);
...
我在執行過程中總是出錯。
我不知道我是否需要downcasting ,.我有這種情況:
template<class Something> class TemplatedClass
{
void method(Base<Something>* base) { ... };
};
class SomeClass : public TemplatedClass<std::string> { ... };
,我想打電話給(編輯整理*):
Derived* d = new Derived();
SomeClass sc;
sc.method(d);
但它給我一個轉換錯誤。
我需要什麼? Downcasting還是什麼?
我相信這是上傳。 – 2012-03-26 09:56:07
是的,它是上傳! arrrgg ... – logoff 2012-03-26 10:30:57