2016-11-04 14 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 idem: 'py :: isinstance (obj)'です。 – Malick