Python Swig wrapp a c++;数据类型?

Python Swig wrapp a c++;数据类型?,python,c++,swig,Python,C++,Swig,这可能是一个简单的问题。如何从Python调用C++定义的数据类型 uTIN 32 < /强>?< /P> test.cpp: #include "test.h" namespace test { void test(UInt32 param) { std::cout << param << std::endl; } } 错误: >>> import test >>> test.test(1) TypeError: in

这可能是一个简单的问题。如何从Python调用C++定义的数据类型<强> uTIN 32 < /强>?< /P> test.cpp:

#include "test.h"
namespace test {  
    void test(UInt32 param) { std::cout << param << std::endl; }
}
错误:

>>> import test
>>> test.test(1)
TypeError: in method 'test', argument 1 of type 'test::UInt32'
使用typemapping()。 最简单的示例应该如下所示:

%apply int { test::UInt32 };  
使用typemapping()。 最简单的示例应该如下所示:

%apply int { test::UInt32 };  

<> P>这里的问题是SWIG不知道UTI32是什么类型的。对于一个普通的C++ Type,可以简单地在接口文件中告诉SWIG,例如:

上述解决方案,即,
%apply int{UInt32}
本质上是(
Typemaps.i
)用
int
替换形式为
UInt32
的任何参数实例(SWIG默认知道)。但是,它不一定保留未签名的属性。在这里,您可能希望使用
%apply unsigned int{UInt32}。(请注意,您需要包括
Typemaps.i
,这样才能工作)

最后,如果您需要能够返回值(例如,您希望通过引用传递该值),您可以使用以下表单:

%apply unsigned int *INOUT { UInt32 };

要走的路取决于你想做什么。如果您只需要SWIG将typedef理解为SWIG已经知道的(原语或派生)类型的“同义词”,那么
typedef
方法就足够了。如果您还需要控制SWIG如何处理参数(例如,您需要通过引用传递/返回值)的行为,则Type MeMax(由%Apple < /C++ >命令)是行进的方式。

< P>问题是,SHIG不知道UTI32是什么类型的。您可以在界面文件中简单地告诉SWIG,例如:

上述解决方案,即,
%apply int{UInt32}
本质上是(
Typemaps.i
)用
int
替换形式为
UInt32
的任何参数实例(SWIG默认知道)。但是,它不一定保留未签名的属性。在这里,您可能希望使用
%apply unsigned int{UInt32}。(请注意,您需要包括
Typemaps.i
,这样才能工作)

最后,如果您需要能够返回值(例如,您希望通过引用传递该值),您可以使用以下表单:

%apply unsigned int *INOUT { UInt32 };
要走的路取决于你想做什么。如果您只需要SWIG将typedef理解为SWIG已经知道的(原语或派生)类型的“同义词”,那么
typedef
方法就足够了。如果您还需要控制SWIG处理参数的方式(例如,您需要能够通过引用传递/返回值),那么类型映射(由
%apply
命令提供)就是一种方法

%apply unsigned int *INOUT { UInt32 };