如果class B
来自class A
,我可dynamic_cast
shared_ptr<B>
到shared_ptr<A>
,从shared_ptr<A>
到{{1} }}?
我只是问自己,因为使用shared_ptr<B>
,您可以在Java中执行类似dynamic cast
的操作。我问自己这是否适用于instanceof
。
答案 0 :(得分:4)
对于从派生类转换为基类的特定情况,可以使用赋值运算符为您执行必要的隐式转换。对于另一个方向,您可以使用dynamic_pointer_cast。
#include <memory>
struct A { virtual ~A() = 0; };
struct B: A { };
void example()
{
// derived to base
std::shared_ptr<B> b;
std::shared_ptr<A> a = b;
// base to derived
std::shared_ptr<A> a2;
std::shared_ptr<B> b2 = std::dynamic_pointer_cast<B>(a2);
}
有关投射操作的更多信息,请参阅http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast - 所有常见的嫌疑人都有等同物,例如reinterpret_pointer_cast
等。