Каков правильный синтаксис для связывания типа typedef с использованием pybind11? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть структура, очень похожая на эту:

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.

1 Ответ

0 голосов
/ 07 июня 2018

Для этой конкретной проблемы pybind автоматически интерпретирует тип std :: vector как список python, когда вы включаете "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

...