c++ - 跨shared_ptr的dynamic_cast?

标签 c++ polymorphism shared-ptr dynamic-cast

我有两个类 A 和 B,B 继承自 A。

如果我有 shared_ptr<A>我知道的对象实际上是 B 子类型,我如何执行动态转换来访问 B 的 API(记住我的对象是 shared_ptr,而不仅仅是 A?

最佳答案

如果您只想调用 B 中的函数您可以使用以下之一:

std::shared_ptr<A> ap = ...;
dynamic_cast<B&>(*ap).b_function();
if (B* bp = dynamic_cast<B*>(ap.get()) {
    ...
}

如果您真的想获得 std::shared_ptr<B>来自 std::shared_ptr<A> ,你可以使用使用

std::shared_ptr<B> bp = std::dynamic_pointer_cast<B>(ap);

关于c++ - 跨shared_ptr的dynamic_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795265/

相关文章:

c++ - 带有部分符号的遗留 proc C/C++ 代码(§)

c++ - 从二进制文件 C++ 读取行

java - Java 中引用子进程和父进程是否属于多态性?

c++ - 查找 boost::shared_ptr 循环引用

c++ - shared_ptr 赋值符号隐式转换

c++ - 未能将指向函数的指针用作类的成员

c++ - gcc 模板解析和命名空间

c++ - 在继续派生函数之前执行基函数

c - 如何在C中存储不同类型的数据?

c++ - 如何正确使用std::transform和std::mem_fn?