Python 指向类的指针的STL映射的SWIG类型映射

Python 指向类的指针的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

我试图将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[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一个返回map
map my_函数()的函数
,然后SWIG将根据需要返回
映射
,而不是
映射*
。getter返回指向成员对象的指针,以避免复制。如果改为按值返回,则将创建并返回成员对象的副本。SWIG手册在上述链接下也讨论了这一点。
import example
t = example.Example()
t.my_map
<Swig Object of type 'map< int,Test * > *' at 0x10135e7b0>