如何使用 swig C++命名空间作为 python 模块公开

How to expose with swig C++ namespaces as python modules

本文关键字:python 模块 何使用 swig C++ 命名空间      更新时间:2023-10-16

有C++代码:

namespace ns {
struct Person {};
}

我想在模块ns中向python公开Person类:

import libapp
x = libapp.ns.Person()

可以使用树枝吗?

我想将C++命名空间层次结构映射到Python模块层次结构的其他工作。

我有一个用Boost.Python编写的包装器(它允许这样的映射(,并且我正在切换到 swig,所以我不想重写包装器客户端代码。

最简单的答案是为每个要公开的命名空间编写一个 SWIG 模块,因此在上面的实例中,您将在 libapp 包中编写一个名为ns的 SWIG 模块。

您可以使用 SWIG%import指令引用仍在其他模块中的其他命名空间。

你也可以对SWIG生成的运行时信息进行一些处理,以便在运行时甚至编译时将其连接起来,但这样做的复杂性远远超过了干净地拆分模块的好处。