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

후속 질문 : 개체가 내 클래스 중 하나의 파이썬 표현 (즉 통해 파이썬에 노출 된 경우 테스트하려면이를 어떻게 사용합니까 pybind11)? –

+1

@LarryGritz idem :'py :: isinstance (obj)'. – Malick