如何使用pyBDN11将PyCapsule从C++发送到Python

2024-05-28 17:05:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用pybd11把PyCapsule从C++传递到python,但似乎无法弄清楚如何做。我花了几天的时间阅读这些文件,但我还不知道如何使这些文件生效

我已经创建了一个类,我想将其发送到python。 我尝试在函数GETDATAATESTOR中创建一个Py::Cub C++实例,并使用pyBund11i模块将其传递给Python。尝试下面的代码时,我得到以下错误消息:

TypeError: Unable to convert function return value to a Python type! The signature was
    () -> DLTensor

如能就如何解决此问题提供任何指导,将不胜感激

我的代码如下:

class DLTensor{
public:
    double* data;
    int size;

    DLTensor():data{new double[10]},size{10}{}
};

py::capsule getDataTensor() { 
    std::unique_ptr<DLTensor> dlptr =std::unique_ptr<DLTensor>(new DLTensor());
    auto pybind_capsule= py::capsule(&dlptr,"DLTensorData",nullptr);
    return pybind_capsule; 
    }


namespace py = pybind11;

PYBIND11_MODULE(DBDLTensor, m) {
    m.def("getDataTesor", getDataTensor);

}

Tags: 文件to代码pynewdatasizereturn
1条回答
网友
1楼 · 发布于 2024-05-28 17:05:29

我设法让代码正常工作,所以我决定发布我的方法。
在PYBIND11_模块中,我缺少一个py:class_uu定义,在将结果返回给python时,我缺少一个符号and

请参阅下面的工作代码:

class DLTensor{
public:
    double* data;
    int size;

    DLTensor():data{new double[10]},size{10}{
    }
};

py::capsule getCapsuleDataTensor() { 
    DLTensor dltensor;
    auto pybind_capsule= py::capsule(&dltensor,"dltensor",nullptr);
    return pybind_capsule; 
    }

namespace py = pybind11;

PYBIND11_MODULE(DBDLTensor, m) {
    py::class_<DLTensor>(m, "DLTensor");
    m.def("getCapsuleDataTensor", &getCapsuleDataTensor);
}

相关问题 更多 >

    热门问题