为什么SWIG无法解析模板/结构?

时间:2015-07-30 12:54:15

标签: swig

我正在尝试使用以下非常简单的接口文件使用SWIG包装.h文件:

%module example
%{
/* Includes the header in the wrapper code */
#include "../pointmatcher/PointMatcher.h"
%}

/* Parse the header file to generate wrappers */
%include "../pointmatcher/PointMatcher.h"

包装尝试失败,并显示以下错误:

C:\Data\Projects\lpm-source\libpointmatcher-swig\wrapper>C:\Data\Downloads\swigw
in-3.0.5\swig.exe -csharp -cpperraswarn example.i
..\pointmatcher\PointMatcher.h(61) : Warning 205: CPP #error ""You need libnabo
version 1.0.6 or greater"".
..\pointmatcher\PointMatcher.h(130) : Error: Syntax error in input(1).

有问题的一行是:

template<typename T>
struct PointMatcher  <-- this line
{

来自此文件:https://github.com/ethz-asl/libpointmatcher/blob/master/pointmatcher/PointMatcher.h#L130

为什么SWIG解析失败?

1 个答案:

答案 0 :(得分:1)

Swig将文件解析为C文件而不是C ++,并且不理解template关键字。尝试:

swig -c++ -csharp -cpperraswarn example.i

请参阅swig documentation on wrapping C++

此外,宏DEF_REGISTRAR(...)DEF_REGISTRAR_IFACE(...)等功能会让swig感到困惑。因此%include要么定义这些文件,要么通过添加

来定义它们
#define DEF_REGISTRAR_IFACE(...)
#define DEF_REGISTRAR(...)

%include "../pointmatcher/PointMatcher.h"

之前