2016-11-04 3 views
3

Я рассматриваю порт сложного кода от boost :: python to pybind11, но я озадачен отсутствием чего-то вроде boost::python::extract<...>().check(). Я прочитал pybind11::cast<T>, может быть использован для извлечения C++-объекта из py::object, но единственный способ проверить, возможно ли это, - это вызвать его и перехватить исключение при неудачной передаче. Есть ли что-то, что я пропускаю?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 idem: 'py :: isinstance (obj)'. – Malick

Смежные вопросы