Boost.Pythonを使ってC++とPython間でdictionaryのやり取りを行う。
まずはじめに出会う例はmap_index_suiteを使う例だが、これはpythonで使う場合に.keys()などのメソッドが使えないので困る。
なのでboost::python::dictを直接やり取りするようなメソッドを準備する。
まずPythonのdictionaryをC++のmapにセットする場合のクラス・メソッドは例えば以下のようになる。
逆にC++のマップをPythonのdictionaryとして返す場合は以下のようにする。
まずはじめに出会う例はmap_index_suiteを使う例だが、これはpythonで使う場合に.keys()などのメソッドが使えないので困る。
なのでboost::python::dictを直接やり取りするようなメソッドを準備する。
まずPythonのdictionaryをC++のmapにセットする場合のクラス・メソッドは例えば以下のようになる。
#include <boost/python.hpp void Hoge::set_dict(const boost::python::dict &pydict) { std::map<std::string, double> newmap; int len = boost::python::len(pydict); boost::python::list keys = pydict.keys(); for(int i=0; i < len; i++) { std::string k = boost::python::extract<std::string>(keys[i]); newmap[k] = boost::python::extract<double>(pydict[k]); } _dict = newmap; }
逆にC++のマップをPythonのdictionaryとして返す場合は以下のようにする。
boost::python::dict Hoge::get_dict() const { boost::python::dict pydict; std::map<std::string, double>::const_iterator it; for(it = _dict.begin(); it != _dict.end(); it++) pydict[it->first]=it->second; return pydict; }
0 件のコメント:
コメントを投稿