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

标签 c++ templates struct swig

我有一个 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 中定义了模板和 Colorcolor.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::vectorRoll<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/

相关文章:

c++ - 澄清智能指针的 operator* 和 operator-> 重载

c++ - C++中的模板类

c++ - 是否可以使模板自动将 C 字符串转换为 C++ 字符串对象?

c++ - 使用特征时避免部分模板特化中的函数定义重复

types - 由类型文字定义的类型的结构字段上的方法

Android - NDK - C++ - 无法使用 'int *' 类型的右值(又名 'jlong *')初始化 'long long *' 类型的变量

c++ - 为什么 C++ 中的 new 在失败时不返回 NULL

c++ - c++11 中是否有 shared_memory_object 的替代品

go - 传播或解压缩结构作为测试的输入参数

linux - 通过recv C/C++ 通过套接字传递结构