pybind11 相当于 boost::python::extract?
Posted
技术标签:
【中文标题】pybind11 相当于 boost::python::extract?【英文标题】:pybind11 equivalent of boost::python::extract? 【发布时间】:2016-11-04 13:00:04 【问题描述】:我正在考虑将复杂代码从 boost::python 移植到 pybind11,但我对缺少 boost::python::extract<...>().check()
之类的东西感到困惑。我读到pybind11::cast<T>
可用于从py::object
中提取c++ 对象,但检查转换是否可能的唯一方法是调用它并在转换失败时捕获异常。有什么我忽略的吗?
【问题讨论】:
【参考方案1】:isinstance
将完成这项工作 (doc):
namespace py = pybind11;
py::object obj = ...
if (py::isinstance<py::array_t<double>>(obj))
....
else if (py::isinstance<py::str>(obj))
std::string val = obj.cast<std::string>();
std::cout << val << std::endl;
else if (py::isinstance<py::list>(obj))
...
【讨论】:
后续问题:如何使用它来测试对象是否是我的一个类的 Python 表示(通过 pybind11 暴露给 Python)? @LarryGritz 同上:py::isinstance<MyCustomClass>(obj)
.以上是关于pybind11 相当于 boost::python::extract?的主要内容,如果未能解决你的问题,请参考以下文章
from _dlib_pybind11 import * ModuleNotFoundError: No module named '_dlib_pybind11'