我有一个C ++代码,它以如下概率包装现有Object:
template< typename Object > struct Roll
{
Object object;
double probability;
Roll( Object p, double s )
: object( p )
, probability( s )
{ }
}
稍后,这将在同一个.h文件中定义为:
typedef Roll< Color > RollColor;
有关如何在SWIG中包装具有基本类型的C ++结构的说明,但是这个也与模板有关,所以我不知道如何在我的接口文件中正确包装它。你知道我怎么能这样做吗?非常感谢你。
答案 0 :(得分:5)
在.i
文件中,使用:
%template(RollColor) Roll<Color>;
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>;
更新,以回应OP的评论
您可以使用:
%template(RollColors) std::vector<Roll<Color>>;
但是,您需要先在Roll
中实现默认构造函数。没有它,您无法创建std::vector
Roll<T>
s。
您可以使用
%template(RollColors) std::vector<RollColor>;
只有你有C ++ typedef。
%{
#include "roll.h"
#include "color.h"
typedef Roll<Color> RollColor;
%}