【发布时间】:2015-12-22 06:01:36
【问题描述】:
我有一组使用 Boost 和 STL 库的 c++ 类,目前正在 Linux 中使用这些类生成可执行文件。我想使用 SWIG 为这个 c++ 代码创建一个 perl 接口。
假设我有 10 个类 1..10,如果我想使用 SWIG 使用 perl 创建一个类 1 的接口,并且 main() 函数在类 5 中
我的接口文件(*.i) 应该是什么样子? 我应该以什么格式构建我的 C++ 代码?
【问题讨论】:
我有一组使用 Boost 和 STL 库的 c++ 类,目前正在 Linux 中使用这些类生成可执行文件。我想使用 SWIG 为这个 c++ 代码创建一个 perl 接口。
假设我有 10 个类 1..10,如果我想使用 SWIG 使用 perl 创建一个类 1 的接口,并且 main() 函数在类 5 中
我的接口文件(*.i) 应该是什么样子? 我应该以什么格式构建我的 C++ 代码?
【问题讨论】:
您无需包装 main() 即可为 Class1 创建接口。如果只想在 perl 中拥有那个特定的类,那么你应该写
%module <your_module_name>
%{
#include "class1.h"
%}
%include "class1.h"
SWIG 将扫描class1.h 并为其将遇到的每个类和函数创建相应的包装器。您可以使用%ignore 来防止某些符号被包装。如果 Class1 的头部还有其他类型,比如 Class2 和 Class3,类似
class Class1 {
Class2 foo();
Class3 bar();
};
SWIG 将发出错误,因为它不知道如何包装这些类型。您要么也需要包装它们,要么如果您不想公开其他类,您可以编写
%import "class2.h"
%import "class3.h"
这会将必要的类型信息告知 SWIG,但不会创建包装器。
【讨论】: