创建 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")
...
;
}
}
它会导致编译时错误:链接规范必须在全局范围内
有没有办法将可以从 Python 访问的类 B 声明为 <代码>abB?
Using boost python I need create nested namespace.
Assume I have following cpp class structure:
namespace a
{
class A{...}
namespace b
{
class B{...}
}
}
Obvious solution not work:
BOOST_PYTHON_MODULE( a ) {
boost::python::class_<a::A>("A")
...
;
BOOST_PYTHON_MODULE(b){
boost::python::class_<a::b::B>("B")
...
;
}
}
It causes compile-time error: linkage specification must be at global scope
Is there any way to declare class B that would be accessed from Python as a.b.B
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你想要的是 boost::python: :范围。
Python 没有“命名空间”的概念,但是您可以像使用命名空间一样使用类:
然后在 python 中,您有:
All
a
,aA
,ab
和abB
实际上是类,但您可以将a
和ab
就像命名空间一样 - 并且永远不会真正实例化它们What you want is a boost::python::scope.
Python has no concept of 'namespaces', but you can use a class very much like a namespace:
Then in python, you have:
All
a
,a.A
,a.b
anda.b.B
are actually classes, but you can treata
anda.b
just like namespaces - and never actually instantiate them虚拟类的技巧非常好,但不允许:
因此,请使用 PyImport_AddModule()。您可以在以下文章中找到功能齐全的示例: Python 扩展模块中的包,作者:Vadim Macagon。
简而言之:
The trick with dummy classes is quite fine, but doesn't allow:
So, instead, use PyImport_AddModule(). You may find full featured examples in the following article: Packages in Python extension modules, by Vadim Macagon.
In short: