gpt4 book ai didi

c++ - 确定工厂方法返回的对象的类(错误 : function does not take 1 arguments

转载 作者:行者123 更新时间:2023-11-30 04:13:17 25 4
gpt4 key购买 nike

我有一个工厂方法,它要么返回 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++ - 确定工厂方法返回的对象的类(错误 : function does not take 1 arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com