Python 指向类的指针的STL映射的SWIG类型映射
我试图将int(C++)的STL映射(版本3)向类指针,到Python 3: 示例.hPython 指向类的指针的STL映射的SWIG类型映射,python,c++,pointers,stl,swig,Python,C++,Pointers,Stl,Swig,我试图将int(C++)的STL映射(版本3)向类指针,到Python 3: 示例.h #include <map> using namespace std; class Test{}; class Example{ public: map<int,Test*> my_map; Example() { int a=0; Test *b = new Test(); this->my_map
#include <map>
using namespace std;
class Test{};
class Example{
public:
map<int,Test*> my_map;
Example()
{
int a=0;
Test *b = new Test();
this->my_map[a] = b;
}
};
返回
<Swig Object of type 'map< int,Test * > *' at 0x10135e7b0>
而不是字典。它还有一个指向地图的指针,而不是一个地图。如何编写正确的%typemap
将STL映射转换为Python 3字典
我已经能够在诸如int到int的映射中做到这一点——这是一个给我带来麻烦的类指针
谢谢。让我为您从SWIG手册中获取相关条目
这告诉您,成员变量
my_map
是通过SWIG生成的getter访问的,该getter返回map*
(或者引用,如果您给出%naturalvar
指令)。因此,您的out typemap必须编写为处理map*
而不是map
谢谢!我想这是显而易见的答案。为什么getter返回指针而不是对象?例如,如果我们改为SWIG wrap一个返回mapmap my_函数()的函数
,然后SWIG将根据需要返回映射
,而不是映射*
。getter返回指向成员对象的指针,以避免复制。如果改为按值返回,则将创建并返回成员对象的副本。SWIG手册在上述链接下也讨论了这一点。
import example
t = example.Example()
t.my_map
<Swig Object of type 'map< int,Test * > *' at 0x10135e7b0>