我有一个 C++ 代码,它以如下概率包装一个现有对象:
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++ 结构的说明,但这也与模板有关,所以我不知道如何在我的接口(interface)文件中正确包装它。你知道我该怎么做吗?非常感谢。
最佳答案
在.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>
你可以使用
%template(RollColors) std::vector<RollColor>;
仅当您有 C++ typedef 时。
%{
#include "roll.h"
#include "color.h"
typedef Roll<Color> RollColor;
%}
关于c++ - 在 SWIG 中包装 C++ 结构模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760307/