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

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

R S*_*ahu 5

.i文件中,使用:

%template(RollColor) Roll<Color>;
Run Code Online (Sandbox Code Playgroud)

更多信息,请访问http://www.swig.org/Doc1.3/Python.html#Python_nn26.

假设您已定义模板roll.hColor在其中定义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::vectorRoll<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)