我有两个类 - 比如说A和B.B类是A的子类,都有函数H,这样:
our_singer.php
派生类B是:
class A{
public:
A(){;;} // ctor
virtual ~A(){ ;; } // destr.
virtual double H(int i,int j){
std::cout<<"Calling the base function H. Level is too abstract\n";
exit(0);
return 0.0;
}// H
};// class A
我还有一个接受A类类型参数的函数:
class B : public A{
public:
B(){;;} // ctor
~B(){ ;; } // destr.
double H(int i,int j){
return 1.0;
}// H
};// class B
我想在Python中使用派生类型B的对象作为此函数的参数。因此,我按照here所解释的那样导出了两个类和函数:
double f(A x){
return x.H(1,1);
}
所以在Python中我做了:
BOOST_PYTHON_MODULE(modAB){
class_<A>("A", no_init);
class_<B, bases<A> >("B", init<>())
.def("H", &B::H)
;
def("f", &f);
}
作为输出,我看到方法H是从基类调用的,而不是像我预期的那样从派生类调用:
>>> from modAB import *
>>> x = B()
>>> res = f(x)
所以,我的问题是我错了,我可能错过了什么?
答案 0 :(得分:2)
<script type="text/javascript">
function treeViewDrop(dropEvent) {
var treeView = $("#ourTreeView").data("kendoTreeView");
var destination = treeView.dataItem(dropEvent.destinationNode);
var source = treeView.dataItem(dropEvent.sourceNode);
if (!(destination && destination.parentID == source.parentID)) {
dropEvent.setValid(false);
}
}
</script>
按值传递double f(A x)
,因此传递x
类型的对象会将其派生的虚函数分开。
要解决此问题,您需要传递B
:
const A&