创建boost-python嵌套名称空间
使用boost python我需要创建嵌套的名称空间。
假设我有以下cpp类结构:
namespace a
{
class A{...}
namespace b
{
class B{...}
}
}
明显的解决方案不起作用:
BOOST_PYTHON_MODULE( a ) {
boost::python::class_<a::A>("A")
...
;
BOOST_PYTHON_MODULE(b){
boost::python::class_<a::b::B>("B")
...
;
}
}
它会导致编译时错误: linkage specification must be at global scope
有什么方法可以声明可以从Python访问的B类a.b.B
吗?
-
您想要的是boost :: python ::
scope。Python没有“命名空间”的概念,但是您可以像命名空间一样使用类:
#include <boost/python/module.hpp> #include <boost/python/class.hpp> #include <boost/python/scope.hpp> using namespace boost::python; namespace a { class A{}; namespace b { class B{}; } } class DummyA{}; class DummyB{}; BOOST_PYTHON_MODULE(mymodule) { // Change the current scope scope a = class_<DummyA>("a") ; // Define a class A in the current scope, a class_<a::A>("A") //.def("somemethod", &a::A::method) ; // Change the scope again, a.b: scope b = class_<DummyB>("b") ; class_<a::b::B>("B") //.def("somemethod", &a::b::B::method) ; }
然后在python中,您具有:
#!/usr/bin/env python import mylib print mylib.a, print mylib.a.A print mylib.a.b print mylib.a.b.B
所有
a
,a.A
,a.b
和a.b.B
实际上的类,但你可以把a
和a.b
就像命名空间-永不实际上的实例化