在SWIG中包装C ++结构模板

时间:2015-06-10 15:07:27

标签: c++ templates struct swig

我有一个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 ++结构的说明,但是这个也与模板有关,所以我不知道如何在我的接口文件中正确包装它。你知道我怎么能这样做吗?非常感谢你。

1 个答案:

答案 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;
%}