通过引用将派生类指针传递给需要基指针的函数
Passing derived class pointer to function expecting base pointer by reference
我有一个键值容器类,它包含指向基类型的堆分配对象的指针。容器的 insert 方法实例化 2 个派生类对象之一(基于运行时标志(并将其插入到自身中。
我有一个具有以下签名的Find
方法:
bool Find(int key, Base *&result);
使用此容器的类知道实际存储的是哪个派生类,因为类的用户和派生类型之一之间存在一对一的映射。
因此,当用户尝试调用 Find 方法时,如下所示:
DerivedA *a = nullptr;
bool found = container.Find(10, a);
我收到一个编译器错误,说没有匹配的函数。
因此,基类和派生类之间似乎没有发生隐式转换。我怀疑这与我通过引用传递指针的事实有关,但我不确定。
实现我在这里所追求的目标的"正确"方法是什么?
谢谢!
我怀疑这与我通过引用传递指针的事实有关
想象一下,Find
更新传递的指针,现在它指向Base
的新实例。但是调用方仍然将其解释为指向DerivedA
的指针。
基本上问题是你可以分配
Base* basePtr = &derived;
但不是这样。因此,如果您的Find
方法的唯一保证是它找到Base
类型的实例,我们不能只将指向它的指针分配给DerivedA
。
如果你知道你的Base
类指针指向DerivedA
,你可以考虑dynamic_cast
:
Base* Find(int key);
....
DerivedA* a = dynamic_cast<DerivedA*>(Find(key));
(正如@juanchopanza注释所建议的那样,返回指针可能会更好。
添加查找的重载
Base *pi=result;
bool r=Find(key,pi);
result=dynamic_cast<DerivedA *>(pi);
return r;
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址