gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:39 25 4
gpt4 key购买 nike

我有一个类仅将 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.
}

最佳答案

Is there any other way than either static_pointer_castor #includethe header of class A?

没有。事实上,#include 是正确执行此操作的唯一方法(static_pointer_cast 要么不起作用,要么调用未定义的行为)。您也不能在不完整的子类和父类(super class)之间转换普通指针。

关于c++ - 在前向声明的类层次结构的 shared_ptr 之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com