2016-11-04 66 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