Swig:包装结构的向量(嵌套在类和命名空间中)

时间:2016-01-21 19:08:49

标签: python c++ swig

以下是我的问题的简化示例:

我在一个类中有一个结构,它位于一个名称空间中。在课堂上,有一个my_struct的矢量。

namespace my_namespace {
    class my_class {
    public:
        struct my_struct {
            int a;
            int b;
        }

        std::vector<my_struct> my_vector;
    }    
}

还有一个返回my_vector的函数(在example.h中)。上面的代码在example.h中是#included。我尝试使用SWIG包装它,以便我可以在Python中访问my_vector。我的SWIG文件目前看起来像这样。我试图使用嵌套的变通方法。

%module Example

%{
#include "example.h"
%}

// Redefine struct class in global scope in order for SWIG to generate proxy class
// Only SWIG parses this definition
struct my_struct
{
    int  a;
    int  b;
};
%nestedworkaround my_namespace::my_class::my_struct;

// We fooled SWIG into thinking that DtProgramMapping is a global struct
// Now we need to trick the C++ compiler into understanding this apparent global type
%{
typedef my_namespace::my_class::my_struct my_struct;
%}

%include "std_vector.i"
%template(MyStructVector) std::vector<my_namespace::my_class::my_struct>;

%include "example.h"

如果我在example.h中定义my_struct(没有命名空间和类),一切正常。但不幸的是,在我的申请中,我无法删除它们。使用当前代码,我得到一个Swig对象列表,如下所示:

<Swig Object of type 'std::vector< my_namespace::my_class::my_struct >::value_type *' at 0x7f82...>

我希望找回Swig对象的代理列表...&#39;,因为我能够访问其中的成员:

<Example.my_struct; proxy of <Swig Object of type 'std::vector< my_struct >::value_type *' at 0x7f82...> >

0 个答案:

没有答案