python - 使用 pybind11 绑定(bind) typedef 类型的正确语法是什么?

标签 python c++ syntax 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;

此结构的绑定(bind)已定义:

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 列表类型定义绑定(bind)? 我不清楚如何在 pybind 文档中执行此操作。

最佳答案

对于这个特定问题,当您包含 "pybind11/STL.h" 时,pybind 会自动将 std::vector 类型解释为 python 列表。因此,这种类型的绑定(bind)是不必要的。

例如:

#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

关于python - 使用 pybind11 绑定(bind) typedef 类型的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50730012/

相关文章:

python - Matplotlib 动画多个大圆圈并从 pandas df 更新

c++ - 可以从 std::variant 继承以使其递归吗?

c++ - 从读取之前关闭的文件中读取

objective-c - 为什么 {} 适用于 C 结构而不适用于属性

python - 删除python中的所有html?

python - 可以使用scipy将连续随机变量转换为离散变量吗?

python - 使用完整路径时 pyenv virtualenv 激活不起作用

c++ - 给定一个源文件,有没有办法让 gcc 只返回直接包含的头文件列表?

mysql - 将 MySQL 中的列从 int 更改为 double?

java - mySQL 查询在 java 中给出语法错误,但在 mySQL Workbench 中工作正常