我将一些C++类暴露给具有嵌套的^ {{CD1}}的Python。查看在{{a1}和wiki.python.org上的示例文档,我不能看到一旦输入了一个范围,就返回到全局/模块范围。相反,每个后续作用域都嵌套在前一个作用域中。在
例如:#include
class Foo
{
public:
enum Choose { eFoo, eBar };
/* Default constructor with enum as required argument */
Foo(Choose choice): m_choice(choice) {}
~Foo() {}
Choose get() const { return m_choice; }
private:
const Choose m_choice;
};
class Bar
{
};
BOOST_PYTHON_MODULE(foo)
{
using namespace boost::python;
scope global;
/* Define Foo class, and a scope to go with it. */
scope in_Foo = class_
("Foo", init<:choose>())
.def("rovalue", &Foo::get)
;
/* Expose 'Choose' enum as Foo.Choose */
enum_<:choose>("Choose")
.value("Foo", Foo::eFoo)
.value("Bar", Foo::eBar)
;
/* How to get back to module scope?? */
global;
scope();
/* This currently is exposed as Foo.Bar, but should just be Bar */
class_("Bar", init<>())
;
}
我尝试过将global;行更改为各种内容,但结果都相同:
^{pr2}$
编辑:
又看了一眼wiki.python.org网站,似乎在上面的例子中,正确的答案应该是使用scope within(global)来恢复到模块级作用域。事实上,这对上面的例子是有效的。然而不幸的是,当我在实际应用程序中使用它时,我得到了一个编译错误。。在#include
using namespace boost;
BOOST_PYTHON_MODULE(foo)
{
python::scope module_level;
/* .... */
python::scope python::within(module_level);
/* ... */
}
编译错误:error: invalid use of qualified-name 'boost::python::within'