Pybind11:将元组列表从Python传递到C ++

佐治亚州

我正在使用pybind11,我想将一个元组(坐标)列表从Python传递到C ++。这是示例C ++代码:

parse_coords(py::list coords) {
    std::vector<PointI> coordinates(py::len(coords));
    
    for (size_t i = 1; i < py::len(coords); i++) {
        coordinates[i].x = coords[i][0];
        coordinates[i].z = coords[i][1];
    }
}

显然,这是行不通的。我得到的错误是cannot convert ‘pybind11::detail::item_accessor’ {aka ‘pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item>’} to ‘int’ in assignment

我如何传递所有比int复杂的列表,这就是我能够找到的所有示例?

皮特·巴雷科(Piotr Barejko)

您必须使用py::cast如果没有为您的自定义类型注册任何强制转换功能,或者类型不匹配,那么您将得到一个异常:

例:

void cast_test(const py::list& l)
{
    for(auto it = l.begin(); it != l.end(); ++it)
    {
        std::cout << it->cast<int>() << std::endl;
    }
}
>>> example.cast_test([1,2,3])
1
2
3
>>> example.cast_test([1,2,"a"])
1
2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Unable to cast Python instance to C++ type (compile in debug mode for details)
>>> 

在这里您可以找到有关内置强制转换的更多详细信息:https : //pybind11.readthedocs.io/en/stable/advanced/pycpp/object.html

这里是如何添加自定义类型脚轮:https : //pybind11.readthedocs.io/en/stable/advanced/cast/custom.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过pybind11将字符串列表从python传递到C

使用Pybind11将C ++扩展到Python

如何将共享指针列表传递给pybind11中的c ++对象

使用 PYBIND11_MODULE 时使用 Pybind11 将 C++ 函数集成到 Python 时出错

使用pybind11从python传递指向C ++的指针

使用pybind11将Python解释器嵌入到多线程C ++程序中

pybind11从print()将python sys.stdout重定向到c ++

将Python bool转换为C ++(pybind11)

pybind11:如何将c ++和python代码打包到一个包中?

使用Python,C ++和pybind11返回并传递原始POD指针(数组)

如何使用pybind11将Python函数作为C ++线程内的回调进行调用

使用Pybind11将Eigen :: Tensor暴露给Python

从pybind11包装本征返回数组的列表或元组

使用 pybind11 在 python 中打印 C++ 类

在pybind11中使用python中的C ++对象

使用pybind11从c ++调用Python函数

如何在Pybind11中将Python dict转换为C ++计数器部分?

Python和C ++:如何将pybind11与包含GSL库的Cmakelists一起使用

无法将元组传递到列表视图

Pybind11:将字符串*参数传递给构造函数

在C ++中访问pybind11 kwargs

如何通过pybind11传递Python的关键字参数?

PyBind11:将boost :: multiprecision :: cpp_int转换为Python

使用pybind11将NumPy数组强制转换为自定义C ++矩阵类

Pybind11:在构造时将类所有权转移到C ++

Python 和 C++ (Pybind11):Python 扩展模块导入错误

如何从Python的OpenCV的图像和pybind11使用它在C ++?

在C回调中如何使用Pybind11访问Python对象?

通过pybind11遍历包装在Python中的C ++对象