【发布时间】:2017-02-12 00:25:44
【问题描述】:
我有一个键值容器类,它保存指向堆分配的基类型对象的指针。容器的 insert 方法实例化 2 个派生类对象之一(基于运行时标志)并将其插入自身。
我有一个带有以下签名的Find 方法:
bool Find(int key, Base *&result);
使用此容器的类知道实际上存储的是哪个派生类,因为在类的用户和派生类型之一之间存在一对一的映射。
所以当用户尝试如下调用 Find 方法时:
DerivedA *a = nullptr;
bool found = container.Find(10, a);
我收到一个编译器错误,提示没有匹配的函数。
因此,基类和派生类之间似乎没有发生隐式转换。我怀疑这与我通过引用传递指针这一事实有关,但我不确定。
什么是实现我在这里追求的“正确”方法?
谢谢!
【问题讨论】:
-
为什么不直接返回一个指针呢?
Base* Find(int key); -
@juanchopanza 这实际上是一个好主意,但我仍然很想知道为什么上述方法不起作用
-
你认为
*&是什么意思? -
@Fureeish
*&表示对指针的引用。 -
@Fureeish 空引用是不允许的。对指针(包括空指针)的引用是可以的。