【发布时间】:2012-05-10 17:36:50
【问题描述】:
我在 C++ 应用程序中嵌入了 python。 C++ 调用 python 并将其作为参数传递给 C++ 对象。该对象具有一些虚函数,并且可以是某些派生类的基类。如何让 boost::python 明白它是一个虚函数?
考虑以下几点:
在 C++ 中:
class Base {
public:
virtual void func();
}
class Derived {
public:
virtual void func();
}
BOOST_PYTHON_MODULE(module_api) {
class_<Base>("Base")
.def("func", &Base::func); // ?? what should I put here?
}
int main() {
//... initialization
Derived derived;
main_namespace["pyentry"](&derived);
}
在python中:
def pyentry(baseref):
baseref.func() # here I want Derived::func() to be called
我在这里做错了什么?
【问题讨论】:
-
你总是可以放置一个非虚拟转发函数:
void Base::doFunc() { this->func(); },.def("func", &Base::doFunc); -
我希望避免这种开销......这不就是 boost::python 的全部意义所在吗?避免开销...?
-
@barak 你能说得更具体点吗?我以各种形式尝试过,但无法正常工作。我不想“覆盖python中的方法”我只想多态地调用一个虚拟。
标签: c++ python boost-python virtual-functions