gpt4 book ai didi

c++ - 将派生类 shared_ptr 作为参数传递给需要基类 shared_ptr 的函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:02 30 4
gpt4 key购买 nike

我刚刚对一个项目进行了大规模重构,添加了一个基类来代替现在所说基类的派生类(因为我想要这个类的更多“类型”)。

我的问题是,一些实用函数将原始类 A 的引用作为 shared_ptr,因此函数声明如下所示:

void UtilityClass::func(shared_ptr<A> &a);

但是现在我有了新的基类 B 并且 A 派生自 B(以及派生自 B 的新类 C),当我尝试传递一个实例时出现编译时错误A 或 C 到函数的声明现在是:

void UtilityClass::func(shared_ptr<B> &b);

如果我尝试并通过:

shared_ptr<A> a;
utilclass.func(a);

我得到一个编译时错误说(释义):

Cannot convert parameter 1 from 'std::shared_ptr<_Ty>' to 'std::shared_ptr<_Ty>'

但我不确定我还能如何解决这个问题,func() 将 A、B 或 C 实例添加到 shared_ptr 值的 std::vector。

感谢您的宝贵时间。

编辑:我还有另一个接受引用的函数,这样它就可以为它分配一个新的 B 实例,然后返回它。

最佳答案

问题是你路过非 const引用,这意味着您需要参数类型完全匹配。

将函数更改为按值获取指针或const引用;然后隐式转换(例如 shared_ptr<Derived>shared_ptr<Base> )可以应用于参数。

关于c++ - 将派生类 shared_ptr 作为参数传递给需要基类 shared_ptr 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17992191/

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