我可以在 SWIG 接口文件中合并显式声明和 "truly lazy" 声明吗?
Can I combine explicit and "truly lazy" declarations in a SWIG interface file?
我已经使用 SWIG tutorial 中的 "truly lazy" 方法成功地为 C# 包装了一个 C++ 库。它看起来像这样:
%module example
%{
/* Includes the header in the wrapper code */
#include "header1.h"
#include "header2.h"
%}
/* Parse the header file to generate wrappers */
%include "header1.h"
%include "header2.h"
但是,这并没有公开我想要的所有 类 和方法。我可以以某种方式添加显式引用以创建缺少的 类 和方法吗?
所有 classes 和方法都应该通过 "truly lazy" 方法公开。如有遗漏,则说明有问题。
有许多潜在的原因。例如,method/class 可能在不同的 header 中定义,或者您弄错了包含的 header。
在我的例子中,这是因为我想要的 class 实际上是一个模板,而 SWIG 不会生成模板。您必须按如下方式调用具体 class 的创建:
%include "header1.h"
// defines List<T>, but doesn't generate List
%template(ListFloat) List<float>;
// now creates a concrete class called ListFloat,
// includes all the methods from that class
有关详细信息,请参阅 SWIG 3.0 手册中的 "Templates"。
我已经使用 SWIG tutorial 中的 "truly lazy" 方法成功地为 C# 包装了一个 C++ 库。它看起来像这样:
%module example
%{
/* Includes the header in the wrapper code */
#include "header1.h"
#include "header2.h"
%}
/* Parse the header file to generate wrappers */
%include "header1.h"
%include "header2.h"
但是,这并没有公开我想要的所有 类 和方法。我可以以某种方式添加显式引用以创建缺少的 类 和方法吗?
所有 classes 和方法都应该通过 "truly lazy" 方法公开。如有遗漏,则说明有问题。
有许多潜在的原因。例如,method/class 可能在不同的 header 中定义,或者您弄错了包含的 header。
在我的例子中,这是因为我想要的 class 实际上是一个模板,而 SWIG 不会生成模板。您必须按如下方式调用具体 class 的创建:
%include "header1.h"
// defines List<T>, but doesn't generate List
%template(ListFloat) List<float>;
// now creates a concrete class called ListFloat,
// includes all the methods from that class
有关详细信息,请参阅 SWIG 3.0 手册中的 "Templates"。