gpt4 book ai didi

c++ - SWIG C++ 到 Python:将 std::list 作为参数返回给 Python

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:23 25 4
gpt4 key购买 nike

我正在尝试从 Python 调用 C++ 中的方法,该方法返回一个 std::list 作为参数。

这是 C++ 原型(prototype):

void FindAllServices(int id, std::list<Service*> &services)

这是我的 std::list 类型映射:

%typemap(in) (std::list<Service*> &) (std::list<Service*> temp) {
$1 = &temp;
}

%typemap(argout) (std::list<Service*>&) {
Py_XDECREF($result); /* Blow away any previous result */
$result = PyList_New((*$1).size());
qList<Service*>::iterator it = (*$1).begin();
int i = 0;
while(it != (*$1).end()) {
PyList_SetItem($result,i,SWIG_NewPointerObj((void*)(*it), SWIGTYPE_p_Service, 0));
it++; i++;
}
}

当我从 Python 调用该函数时,我可以中断 C++ 代码并看到一切正常(即一些服务指针已复制到列表中)。然而,我在 Python 中得到的列表是空的。

你知道我可能做错了什么吗?

谢谢!

最佳答案

您的 argout 代码会创建一个新列表。您必须获得对原始列表的引用并修改它。我不懂 swig,所以我不知道该怎么做。

对于 python 接口(interface),我通常会包装它以便返回一个新列表而不是修改传入的列表。这是一个 C++ 习语,但不是真正的 Python 习语。

关于c++ - SWIG C++ 到 Python:将 std::list 作为参数返回给 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842229/

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