我不是在寻找向暴露虚拟函数到Python的帮助,我想知道如何从C ++端调用所述虚函数。考虑一下......
// ====================
// C++ code
// --------------------
struct Base
{
virtual void func() {
cout << "Hello from C++!";
}
};
BOOST_PYTHON_MODULE(name)
{
// Expose the class and its virtual function here
}
// ====================
// Python code
// --------------------
from name import Base
class Deriv(Base):
def func():
print('Hello from Python!')
关于如何获取Base*
到派生类型的任何建议,这样当我base->func()
时,会调用Python函数? Boost文档仅描述了如何向Python公开虚函数,而不是如何从C +调用它们的重定义。
答案 0 :(得分:0)
我认为您只需致电extract<Base*>(obj)
,其中obj
为python::object
。
答案 1 :(得分:0)
你的方法不会以这么简单的方式运作;你必须在你的python类中添加包装器,随后将从中派生python类。 here, under 1.我简要解释了它的工作原理。因此,要调用c ++虚方法的python-override,请使用get_override
并使用()
调用返回的对象。
对于某些代码,请参阅例如here,其中Predicate
和PredicateWrap
已定义,但PredicateWrap
为really exposed为python;调用重写的方法已完成here,但这对用户是隐藏的。