我有一个类只操作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.
}
答案 0 :(得分:1)
除了static_pointer_castor #include A类标题之外还有其他方式吗?
没有。实际上,#include
是正确执行它的唯一方法(static_pointer_cast
要么不起作用要么调用未定义的行为。你也不能在不完整的子类和超类之间转换普通指针。