【问题标题】:Boost.Python: Calling virtual functions from C++Boost.Python:从 C++ 调用虚函数
【发布时间】:2011-07-27 06:44:20
【问题描述】:

我不是在寻求向 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-&gt;func() 时调用Python 函数? Boost 文档只描述了如何向 Python 公开虚函数,而不是如何从 C+ 调用它们的重新定义。

【问题讨论】:

  • 我猜如果你公开它,它要么正常工作,要么不受支持。你试过了吗? (要么在对象上有另一个方法来调用虚拟,要么有一个单独的函数来获取实例并调用虚拟)。

标签: c++ python boost


【解决方案1】:

您的方法不会以如此简单的方式起作用;您必须将包装器添加到您的 python 类中,随后将派生 python 类。 here, under 1. 我简要解释了它是如何工作的。因此,要调用 c++ 虚拟方法的 python-override,请使用 get_override 并使用 () 调用返回的对象。

对于一些代码,请参见例如here,其中PredicatePredicateWrap 被定义,但是PredicateWrapreally exposed 到python;调用被覆盖的方法已经完成here,但这对用户是隐藏的。

【讨论】:

    【解决方案2】:

    我想你只需调用extract&lt;Base*&gt;(obj),其中objpython::object

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多