使用 pybind11 绑定 typedef 类型的正确语法是什么?
What is the proper syntax to bind a typedef type using pybind11?
我有一个与此非常相似的结构:
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 文档中执行此操作。
对于这个特定问题,当您包含 "pybind11/stl.h"
时,pybind 会自动将 std::vector 类型解释为 python 列表。因此,这种类型的绑定是不必要的。
例如:
#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
库时,您将能够使用 return 列出 data_point
.
的函数
import data_lib
p = data_lib.make_vec()
print len(p)
输出: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 文档中执行此操作。
对于这个特定问题,当您包含 "pybind11/stl.h"
时,pybind 会自动将 std::vector 类型解释为 python 列表。因此,这种类型的绑定是不必要的。
例如:
#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
库时,您将能够使用 return 列出 data_point
.
import data_lib
p = data_lib.make_vec()
print len(p)
输出:2