- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Boost Python 中,您可以像这样向 Python 公开 C++ 类:
object obj = class_<MyClass>("MyClass")
.def("SomeFunc", &MyClass::SomeFunc)
;
假设 MyClass 也有一个函数 SomeOtherFunc。有没有办法稍后在 BOOST_PYTHON_MODULE 代码中将 SomeOtherFunc 暴露给 Python?我尝试使用返回的对象,但它没有属性 def。我还尝试再次实例化 MyClass 的公开,但这只是覆盖了第一个。本质上我正在寻找这样的东西:
obj.def("SomeOtherFunc", &MyClass::SomeOtherFunc)
我试图解决的更大问题是我有许多类继承自模板化基类,我正试图找到一种方法以干净的方式将它们暴露给 Python。到目前为止,我已经制作了一个模板函数,它接受类及其模板参数并构造必要的 class_ 调用,但我可能想稍后修改公开类的定义,所以我不确定该怎么做.
如果有人能准确解释“def”在做什么以及为什么我不需要在 def 之间使用逗号,则加分。
最佳答案
obj
没有名为 def
的成员函数,但 class_
有。 class_
继承自 object
,这就是该分配有效的原因,但您必须这样做。以下工作正常:
auto obj = class_<MyClass>("MyClass")
.def("SomeFunc", &MyClass::SomeFunc)
;
// now obj is an instance of py::class_<MyClass> instead of py::object
obj.def("SomeOtherFunc", &MyClass::SomeOtherFunc);
您从不命名 class_
实例的事实可能会分散人们对这是一个简单构造函数这一事实的注意力。你也可以把上面的写成:
class_<MyClass> obj("MyClass");
obj.def("SomeFunc", &MyClass::SomeFunc);
obj.def("SomeOtherFunc", &MyClass::SomeOtherFunc);
您不必一次性定义所有内容。
Bonus points if someone can explain exactly what
def
is doing and why I don't need commas in between defs.
def
是类模板 class_
的成员函数。它有一个 bunch of overloads ,所有这些都返回对自身的引用:
template <class Init> class_& def(Init );
template <class F> class_& def(char const*, Fn );
template <class Fn, class A1> class_& def(char const*, Fn, A1 );
// etc.
这就是为什么您可以链接它们。每个调用都独立设置内部机制以将该函数公开给 python,并且只返回 *this
。我不知道你需要逗号做什么。
关于python - 事后将成员函数添加到 Boost Python 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851717/
我是一名优秀的程序员,十分优秀!