我的代码中有一个虚拟类:
namespace X
{
class Y
{
public:
/* CTOR */
Y() {};
/* DTOR */
virtual ~Y() {};
/* Initialization */
virtual bool Init() = 0;
virtual int Foo(void** ptr, size_t size) = 0;
virtual int Foo2(void *ptr) = 0;
private:
};
}
我需要在python中使用cppyy定义变量:
std::shared_ptr<X::Y> tempValue = nullptr;
我试过了
self.allocMgr = cppyy.gbl.MEMORY_ALLOCATOR.Allocator.__smartptr__()
但没成功
1条答案
按热度按时间5vf7fwbs1#
cppyy.gbl.std.shared_ptr['X::Y']()
有什么不好用的地方?名义上,使用
cppyy.gbl.std.make_shared
是最简单的方法(就像C++一样),但在这种情况下,模板不能直接示例化,因为示例中的类是虚拟的。但是,您仍然可以使用cppyy.bind_object(cppyy.nullptr, cppyy.gbl.X.Y)
创建类型化的nullptr
,它可以用作参数来帮助隐式模板示例化。请注意,如果
std::shared_ptr<X::Y> tempValue = nullptr;
是您正在寻找的,并且Python代码不明显,那么始终可以使用cppdef
作为解决方案,例如: