以下是我的问题的简化示例:
我在一个类中有一个结构,它位于一个名称空间中。在课堂上,有一个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...> >