使用提升时的多态性::shared_ptr

Polymorphism whilst using boost::shared_ptr

本文关键字:shared ptr 多态性      更新时间:2023-10-16

如果我有一个父类 A 和子类 B 和 C 的继承层次结构,我如何通过 boost::shared_ptr<> 使用多态性,以便函数

virtual void my_func(boost::shared_ptr<A> x) = 0;

可以实现为

void my_func(boost::shared_ptr<B> x);

void my_func(boost::shared_ptr<C> x);

?即使有shared_ptr概念,多态性仍然有效吗?

(很高兴知道这是否适用于 std::shared_ptr 以及提升)

在C++中重写函数时,参数类型必须与基类中的参数类型相同。唯一允许的变体是,如果基类返回指针或引用,则重写函数可能具有协变返回类型。

对于参数类型,任何潜在的变化都取决于它是哪种参数:

  • 输入参数必须是逆变的:如果你知道更特殊的类可以处理它们,你可以允许传入更通用的参数。
  • 输出参数必须是协变的:任何调用都可以处理基类型的对象,即,当知道类是特殊的时,可以得到更特殊的东西。
  • C++没有指示输入或输出参数,即参数始终是输入和输出参数。因此,它们是不变的。