Python:从C++调用虚拟函数

Boost.Python: Calling virtual functions from C++

本文关键字:虚拟 函数 调用 C++ Python      更新时间:2023-10-16

我不想在向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++调用它们的重新定义。

您的方法不会以如此简单的方式工作;您必须将包装器添加到您的python类中,随后将从中派生python类。这里,在1以下。我简要地解释了它的工作原理。因此,要调用c++虚拟方法的python覆盖,请使用get_override并使用()调用返回的对象。

对于一些代码,请参见例如此处,其中定义了PredicatePredicateWrap,但PredicateWrap实际上暴露于python;调用重写的方法在这里完成,但对用户来说是隐藏的。

我想您只需要调用extract<Base*>(obj),其中objpython::object