我有一个键值容器类,它包含指向基类型的堆分配对象的指针。容器的insert方法实例化2个派生的类对象之一(基于运行时标志)并将其插入自身。
我有Find
方法,其签名如下:
bool Find(int key, Base *&result);
使用此容器的类知道哪个派生类实际正在存储,因为该类的用户与其中一个派生类型之间存在一对一的映射。 / p>
因此,当用户尝试按如下方式调用Find方法时:
DerivedA *a = nullptr;
bool found = container.Find(10, a);
我收到编译错误,说没有匹配的函数。
所以似乎在基类和派生类之间没有发生隐式转换。我怀疑它与我通过引用传递指针的事实有关,但我不确定。
实现我在此之后的“正确”方法是什么?
谢谢!
答案 0 :(得分:1)
我怀疑这与我通过引用
传递指针的事实有关
想象一下Find
更新传递的指针,现在它指向Base
的新实例。但调用者仍然将其解释为指向DerivedA
的指针。
基本上问题是您可以指定
Base* basePtr = &derived;
但不是周围的方式。因此,如果Find
方法的唯一保证是找到Base
类型的实例,我们就不能只将指针指向DerivedA
。
如果您确实知道Base
班级指针指向DerivedA
,则可以考虑@piRSquared's solution:
Base* Find(int key);
....
DerivedA* a = dynamic_cast<DerivedA*>(Find(key));
(返回指针可能会更好,因为 @juanchopanza 评论建议。)
答案 1 :(得分:0)
添加查找重载
body.hide-cursor * {
cursor: none;
}
document.body.className = 'hide-cursor';
//or
document.body.className = '';