2016-11-04 65 views
3

我正在考虑从boost :: python到pybind11的复杂代码的端口,但是我对boost::python::extract<...>().check()之类的东西缺失感到困惑。我读pybind11::cast<T>可用于从py::object中提取C++对象,但检查转换是否可行的唯一方法是调用它并在转换失败时捕获异常。有我忽略的东西吗?pybind11相当于boost :: python :: extract?

回答

1

isintance将做的工作(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)) 
{ 
    ... 
} 
+0

后续问题:我怎么用它来测试,如果对象是我的班级之一的Python的代表(这是通过暴露到Python pybind11)? –

+1

@LarryGritz同上:'py :: isinstance (obj)'。 – Malick