map*_*ppa 1 c++ swig templates struct
我有一个C++代码,它包含一个现有的Object,概率如下:
template< typename Object > struct Roll
{
Object object;
double probability;
Roll( Object p, double s )
: object( p )
, probability( s )
{ }
}
Run Code Online (Sandbox Code Playgroud)
稍后,这将在同一个.h文件中定义为:
typedef Roll< Color > RollColor;
Run Code Online (Sandbox Code Playgroud)
有关如何在SWIG中包装带有基本类型的C++结构的说明,但是这个也与模板有关,所以我不知道如何在我的接口文件中正确包装它.你知道我怎么能这样做吗?非常感谢你.
在.i文件中,使用:
%template(RollColor) Roll<Color>;
Run Code Online (Sandbox Code Playgroud)
更多信息,请访问http://www.swig.org/Doc1.3/Python.html#Python_nn26.
假设您已定义模板roll.h并Color在其中定义color.h,您将需要使用:
%{
#include "roll.h"
#include "color.h"
%}
#include "roll.h"
#include "color.h"
%template(RollColor) Roll<Color>;
Run Code Online (Sandbox Code Playgroud)
更新,以回应OP的评论
您可以使用:
%template(RollColors) std::vector<Roll<Color>>;
Run Code Online (Sandbox Code Playgroud)
但是,您需要首先实现默认构造函数Roll.如果没有,你不能创建std::vector的Roll<T>秒.
您可以使用
%template(RollColors) std::vector<RollColor>;
Run Code Online (Sandbox Code Playgroud)
只有你有一个C++ typedef.
%{
#include "roll.h"
#include "color.h"
typedef Roll<Color> RollColor;
%}
Run Code Online (Sandbox Code Playgroud)