Boost.Python:从C ++调用虚函数

时间:2011-07-27 06:44:20

标签: c++ python boost

我不是在寻找暴露虚拟函数到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 +调用它们的重定义。

2 个答案:

答案 0 :(得分:0)

我认为您只需致电extract<Base*>(obj),其中objpython::object

答案 1 :(得分:0)

你的方法不会以这么简单的方式运作;你必须在你的python类中添加包装器,随后将从中派生python类。 here, under 1.我简要解释了它的工作原理。因此,要调用c ++虚方法的python-override,请使用get_override并使用()调用返回的对象。

对于某些代码,请参阅例如here,其中PredicatePredicateWrap已定义,但PredicateWrapreally exposed为python;调用重写的方法已完成here,但这对用户是隐藏的。