3
我想從boost :: python包函數返回collections.namedtuple
的列表,但我不確定如何從C++代碼創建這些對象。對於其他一些類型,有一個方便的包裝器(例如字典),這使得這很容易,但沒有像namedtuple那樣存在。做這個的最好方式是什麼?對字典的名單使用boost :: python創建python collections.namedtple使用boost :: python
現有代碼:
namespace py = boost::python;
struct cacheWrap {
...
py::list getSources() {
py::list result;
for (auto& src : srcCache) { // srcCache is a C++ vector
// {{{ --> Want to use a namedtuple here instead of dict
py::dict pysrc;
pysrc["url"] = src.url;
pysrc["label"] = src.label;
result.append(pysrc);
// }}}
}
return result;
}
...
};
BOOST_PYTHON_MODULE(sole) {
py::class_<cacheWrap,boost::noncopyable>("doc", py::init<std::string>())
.def("getSources", &cacheWrap::getSources)
;
}
一個'namedtuple'是tuple'的'一個子類,所以也許你可以開始用處理前者的代碼並相應地修改它。 – martineau