如何从 shared_ptr 获取具体的 class 对象到抽象的 class 对象
how to get concrete class object from shared_ptr to abstract class objects
我有 shared_ptrs 的向量到派生自抽象 class
的对象
std::vector<std::shared_ptr<Abstract>> objects;
以下失败:
Concrete* c = objects[0].get()
有:
error: invalid conversion from ‘Abstract*’ to ‘Concrete*
如何访问具体类型的对象
如果您必须获得指向派生 class 的指针,请使用 dynamic_cast
。
Concrete* c = dynamic_cast<Concrete*>(objects[0].get());
if ( c != nullptr )
{
// Use c
}
如果你只需要访问一个成员函数或成员变量而不是指针本身,你可以使用std::dynamic_pointer_cast
.
auto cptr = std::static_pointer_cast<Concrete>(objects[0]);
if ( cptr )
{
// Use cptr
}
使用 std::dynamic_pointer_cast
也具有与通常使用智能指针相同的好处。
我有 shared_ptrs 的向量到派生自抽象 class
的对象std::vector<std::shared_ptr<Abstract>> objects;
以下失败:
Concrete* c = objects[0].get()
有:
error: invalid conversion from ‘Abstract*’ to ‘Concrete*
如何访问具体类型的对象
如果您必须获得指向派生 class 的指针,请使用 dynamic_cast
。
Concrete* c = dynamic_cast<Concrete*>(objects[0].get());
if ( c != nullptr )
{
// Use c
}
如果你只需要访问一个成员函数或成员变量而不是指针本身,你可以使用std::dynamic_pointer_cast
.
auto cptr = std::static_pointer_cast<Concrete>(objects[0]);
if ( cptr )
{
// Use cptr
}
使用 std::dynamic_pointer_cast
也具有与通常使用智能指针相同的好处。