如何在Python中用cppyy定义指向导入虚类的shared_ptr
正确实现方式
首先确保cppyy已经加载了包含X::Y类定义的头文件或编译库:
import cppyy cppyy.include("你的头文件路径.h") # 若已编译为库则用 cppyy.load_library("你的库名")
要创建空的std::shared_ptr<X::Y>,有两种直接可行的写法:
方式一:默认构造(对应C++的nullptr初始化)
tempValue = cppyy.gbl.std.shared_ptr[cppyy.gbl.X.Y]()
方式二:显式用nullptr初始化
nullptr = cppyy.gbl.nullptr tempValue = cppyy.gbl.std.shared_ptr[cppyy.gbl.X.Y](nullptr)
为什么之前的写法无效?
你之前使用的__smartptr__是cppyy为某些类自动生成的智能指针别名,但仅当类本身有对应的智能指针typedef(比如类内部定义了using smartptr = std::shared_ptr<Y>)时才有效。而这里需要显式构造std::shared_ptr模板实例,指定模板参数为X::Y,因此直接调用std::shared_ptr的构造方法才是正确路径。
内容的提问来源于stack exchange,提问作者iliya pruzhinin
相关产品推荐
相关产品推荐

