我有一个工厂方法,它要么返回baseclass
的对象,要么返回derivedclass
(baseclass
的派生类)的对象。派生类具有一个带有一个参数的virtual void foo(int x)
方法。但是baseclass
的virtual void foo()
不带参数。
在我的代码中,工厂方法返回类型为bar的指针,该指针明确指向derivedclass
类的对象。但是,由于这仅在运行时才知道,所以我收到一个编译器错误,指出foo()
不带参数。
我可以将此指针转换为derivedclass
类型的指针吗?
std::auto_ptr<baseclass> bar = classfactory::CreateBar(); //returns object of class derivedclass
bar->foo(5);
class baseclass
{
public:
virtual void foo();
}
class derivedclass : public baseclass
{
public:
virtual void foo(int x);
}
最佳答案
要回答您的问题:如果可以确定实例的类型正确,则可以使用static_cast
,否则可以使用dynamic_cast
。像这样:
std::auto_ptr<baseclass> bar = classfactory::CreateBar();
if (derivedclass *der = dynamic_cast<derivedclass*>(bar.get())) {
der->foo(5);
}
但是,类似这样的代码通常暗示设计不好。您不需要访问派生类的细节。也许基类的接口(interface)没有应有的完整?
关于c++ - 确定由工厂方法返回的对象的类(错误:函数不带1个参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19446356/