2

我有一个与此非常相似的结构:

struct data_point
{
    data_point() = delete;
    data_point(const int& data) :
            m_data(data)
    {}

    int m_data;
};

我也有这种类型的声明。

typedef std::vector<data_point> data_list;

此结构的绑定定义为:

PYBIND11_MODULE(data_lib, ref)
{
    py::class_<data_point> dp(ref, "data_point");
    dp.def(py::init<const int&>());
    dp.def_readwrite("m_data", &data_point::m_data);
}

如何为 typedef 列表类型定义绑定?我不清楚如何在 pybind 文档中执行此操作。

4

1 回答 1

1

对于这个特定问题,当您包含"pybind11/stl.h". 因此,这种类型的绑定是不必要的。

前任:

#include "pybind11.h"
#include "pybind11/stl.h"

struct data_point
{
    data_point() = delete;
    data_point(const int& data) :
            m_data(data)
    {}
    int m_data;
};

std::vector<data_point> make_vec(){
    return {data_point(20), data_point(18)};
}

PYBIND11_MODULE(data_lib, ref)
{
    py::class_<data_point> dp(ref, "data_point");
    dp.def(py::init<const int&>());
    dp.def_readwrite("m_data", &data_point::m_data);

    ref.def("make_vec", &make_vec, "A function that returns a vector of data_points");
}

在 python 中,当您导入data_lib库时,您将能够使用返回列表的函数data_point

import data_lib
p = data_lib.make_vec()
print len(p)

输出:2

于 2018-06-07T19:21:06.190 回答