为什么 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"
.
之前
我正在尝试使用 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"
.