gpt4 book ai didi

c++ - 在基类指针容器中访问派生类对象的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 02:06:05 24 4
gpt4 key购买 nike

我有一个 vector<boost::shared_ptr<Base>>目的。我正在插入类型为 Derived 的对象其中 Derived继承Base像这样:container.push_back(boost::shared_ptr<Base>(new Derived()));

我现在想调用一个引用 Derived 成员的函数, 为了修改我刚刚插入的最后一个条目。这样,我不会最终创建此 Derived 的临时实例目的。这就是我能够做到的:func(static_cast<Derived*>(&*container.back())->member);

这对我来说真的很丑陋。但是如果我尝试做 func(static_cast<Derived>(*container.back()).member);相反,编译器说我需要为 Derived 提供一个 ctor它采用参数 (const Base&)为了将 Base 的实例转换为 Derived 的实例,我不需要在这里做...我只想引用我的 shared_ptr 指针,就好像它是一个 Derived*因为我知道这是因为我只是 new编辑。

最佳答案

vector<boost::shared_ptr<Base>> container;

shared_ptr<Derived> ptr(new Derived());
container.push_back(ptr);
func(ptr->member);

没有类型转换。没有 Derived 的临时对象。

关于c++ - 在基类指针容器中访问派生类对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9092727/

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