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

时间:2018-08-24 13:15:36

标签: python c++ swig

具有C ++代码:

namespace ns {
    struct Person {};
}

我想在模块Person中向Python提供ns类:

import libapp
x = libapp.ns.Person()

可以用swig吗?

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

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

1 个答案:

答案 0 :(得分:0)

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

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

您还可以对SWIG生成的运行时信息进行一些修改,以在运行时甚至在编译时进行处理,但是这样做的复杂性远远超过了将模块干净地拆分的好处。