如何将基本智能指针转换为 C++ 中的派生指针?

zha*_*min 1 c++ pointers

代码 :

class Base {
    ...
};

class Derived : public Base {
    void OnlyOwnedByDerived{
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

问题是: 1. 如果我使用基类的智能指针来引用派生类,这样做的原因是我想获得只适合虚函数的动态绑定的好处。但是如果我想使用只属于派生类的函数,我该怎么做? static_cast不同类的智能指针之间给了我一个错误......

  1. 我能想到的最直接的方法是使用原始指针而不是智能指针......

Whi*_*TiM 5

在 C++11 中,有 dynamic_pointer_cast

您可以使用:

void func(std::shared_ptr<Base> b){
    b->VirtualBaseFunction();
    if(auto d = dynamic_pointer_cast<Derived>(b)){
         d->DerivedSpecificFunction():
         ....more code
    }
}
Run Code Online (Sandbox Code Playgroud)