在前向声明的类层次结构的shared_ptr之间进行转换

时间:2011-09-14 18:00:19

标签: c++ shared-ptr

我有一个类只操作shared_ptr到一个继承层次结构(非常简单,有一些类,比如A, B, C等继承自单个类Base)。由于我不需要操纵A,B,C ......本身的实例,因此它们只是向前声明。但是,当我尝试将shared_ptr<A>传递给采用shared_ptr<Base>的方法时,编译器会发生阻塞,因为编译器不知道A继承自Base。除了static_pointer_cast#include A类标题之外,还有其他方法吗?如果没有,你会选择哪一个?

编辑:添加一些代码

// in some file: (Base.h)
class Base
{
    /*code*/
}

// in another file (A.h)
class A : public Base
{
}

// in my file (impl.cpp)
class A; // forward declaration    

void Dummy()
{
    std::shared_ptr<A> myPtr;

    // we have somewhere: void sillyFunction(shared_ptr<Base> foo)
    sillyFunction(myPtr); // does not compile, as no conversion is found.
}

1 个答案:

答案 0 :(得分:1)

  

除了static_pointer_castor #include A类标题之外还有其他方式吗?

没有。实际上,#include是正确执行它的唯一方法(static_pointer_cast要么不起作用要么调用未定义的行为。你也不能在不完整的子类和超类之间转换普通指针。

相关问题