如何使用 swig C++ 命名空间作为 python 模块公开
Posted
技术标签:
【中文标题】如何使用 swig C++ 命名空间作为 python 模块公开【英文标题】:How to expose with swig C++ namespaces as python modules 【发布时间】:2018-08-24 13:15:35 【问题描述】:拥有 C++ 代码:
namespace ns
struct Person ;
我想在模块ns
中将Person
类公开给python:
import libapp
x = libapp.ns.Person()
是否可以使用 swig?
我想将C++
命名空间层次结构映射到Python
模块层次结构。
我有一个用 Boost.Python
编写的包装器(它允许这样的 mapping),我正在切换到 swig,所以我不想重写包装器客户端代码。
【问题讨论】:
【参考方案1】:对此最简单的答案是为每个要公开的命名空间编写一个 SWIG 模块,因此在上面的实例中,您将在 libapp 包中编写一个名为 ns
的 SWIG 模块。
您可以使用 SWIG %import
指令在其他模块中引用其他命名空间。
您还可以对 SWIG 生成的运行时信息进行一些处理,以便在运行时甚至在编译时将其连接起来,但这样做的复杂性远远超过了将模块完全拆分的好处。
【讨论】:
如何在 SWIG 中嵌套模块?请你举个例子好吗。以上是关于如何使用 swig C++ 命名空间作为 python 模块公开的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swig 将 python 类实例作为 c++ 函数的参数传递?
使用 SWIG 时如何将 int 数组和 List<string> 作为参数从 C# 传递给 C++
Swig C++ to C#:如何从 C++ 包装类以使模板类中的方法在 C# 的派生类中可用?
如何使用 SWIG 将 C++ 数组转换为 Python 列表?