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

Why does SWIG fail to parse a template / struct?

我正在尝试使用 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 解析失败?

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".

之前