gpt4 book ai didi

c++ - 使用 boost::python 从 C++ 创建 python collections.namedtuple

转载 作者:太空狗 更新时间:2023-10-29 20:15:16 25 4
gpt4 key购买 nike

我想从 boost::python 包装函数返回 collections.namedtuple 列表,但我不确定如何从 C++ 代码创建这些对象。对于其他一些类型,有一个方便的包装器(例如 dict),这使得这很容易,但 namedtuple 不存在类似的包装器。执行此操作的最佳方法是什么?

字典列表的现有代码:

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)
;
}

最佳答案

下面的代码完成了这项工作。更好的解决方案将得到检验。

在构造函数中执行此操作以设置字段 sourceInfo:

auto collections = py::import("collections");
auto namedtuple = collections.attr("namedtuple");
py::list fields;
fields.append("url");
fields.append("label");
sourceInfo = namedtuple("Source", fields);

新方法:

py::list getSources() {
py::list result;
for (auto& src : srcCache)
result.append(sourceInfo(src.url, src.label));
return result;
}

关于c++ - 使用 boost::python 从 C++ 创建 python collections.namedtuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com