Python:从C++调用虚拟函数
Boost.Python: Calling virtual functions from C++
我不想在向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
并使用()
调用返回的对象。
对于一些代码,请参见例如此处,其中定义了Predicate
和PredicateWrap
,但PredicateWrap
实际上暴露于python;调用重写的方法在这里完成,但对用户来说是隐藏的。
我想您只需要调用extract<Base*>(obj)
,其中obj
是python::object
。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数