具有C++代码:

namespace ns {
    struct Person {};
}

我想在Person模块中向python公开ns类:
import libapp
x = libapp.ns.Person()

可以使用swig吗?

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

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

最佳答案

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

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

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

关于python - 如何使用Swig C++ namespace 作为python模块公开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52005337/

10-11 22:44
查看更多