如何在Python中使用cppyy定义导入虚拟类的共享指针

nkoocmlb  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(67)

我的代码中有一个虚拟类:

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__()

但没成功

5vf7fwbs

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作为解决方案,例如:

cppyy.cppdef("std::shared_ptr<X::Y> tempValue = nullptr;")
ptr = cppyy.gbl.tempValue

相关问题