我意识到,这个代码编译和工作原理:
#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