【问题标题】:C++ casting a pointer to a reference to pointer of base class in function parameterC ++将指针转换为对函数参数中基类指针的引用
【发布时间】:2012-12-07 23:33:50
【问题描述】:

我正在尝试使用其构造函数创建嵌套类的构造函数,该构造函数继承自父嵌套类。基本上:

DerivedList<T>::DerivedNested::DerivedNested(DerivedNode*& ptr)
  : BaseList<T>::BaseNested::BaseNested(ptr)
{}

我的 BaseNested 的构造函数原型是这样的:

BaseList<T>::BaseNested::BaseNested(BaseNode*& ptr)

(并且需要通过引用获取ptr参数,因为它需要在其代码中的所述指针的地址)

我想我必须将我的 DerivedNode* 转换为 BaseNode*,但是: static_cast::BaseNode*>(ptr) 找不到匹配的函数,因为它不是引用,并且 static_cast::BaseNode*&> (ptr) 给出了无效的转换错误。

dynamic_cast 也是如此。 reinterpret_cast 编译,但在执行期间给出了不正确的东西。

有谁知道我如何调用父构造函数?

【问题讨论】:

  • 不可能有两个引用,一个DerivedNode*&amp; 类型和另一个BaseNode*&amp; 类型引用同一个指针。指针指向指针和指针引用不能与多态性一起很好地工作。如果您想要多态行为,请避免这些事情。

标签: c++ pointers pass-by-reference


【解决方案1】:

如果您认为需要引用,那可能是因为您想稍后修改指针。问题是派生类中指针的类型是DerivedNode*,基类中是BaseNode*。如果基类将DerivedNode2* 影响到它的指针怎么办?

您应该使用 setter,或者将逻辑从基类移到派生类。

【讨论】:

  • 我需要一个引用,因为 BaseNested 需要具有一个指向 BaseNode (BaseNode**) 的指针的属性。该 BaseNested 应该像迭代器一样工作,除了多了一个间接性,这就是为什么需要该特定指针的地址的原因。而且我......不确定你所说的“移动逻辑”是什么意思?
  • "移动逻辑" = 在派生类中移动使用此指针的代码。可能是你能做的最好的。否则,使用指向指针的指针,不使用引用(但您必须非常谨慎)。
猜你喜欢
  • 2012-11-21
  • 1970-01-01
  • 2016-10-03
  • 2013-09-23
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 2016-12-31
相关资源
最近更新 更多