在重写类成员函数并围绕基类创建包装器时,有人能帮助我理解Boost Python中的调度函数和转发函数的含义吗?
相同的示例可以在以下位置找到:
具有默认实现的虚拟功能
以下是一个无需转发功能即可正常工作的示例:
class Base
{
public:
virtual void xfoo(int i)
{
cout << "XFOO::BASE" << i;
}
Base(){}
Base(const Base&){}
};
class BaseW : public Base, public wrapper<Base>
{
public:
void xfoo(int i)
{
if(override f= this->get_override("xfoo"))
{
f();
}
Base::xfoo(i);
}
};
class BaseImpl : public Base
{
public:
void xfoo(int i)
{
cout << "xFoo:Der " << i;
}
};
BOOST_PYTHON_MODULE(hello)
{
class_<BaseW, boost::noncopyable >("Base")
.def("xfoo",&Base::xfoo)
;
class_<BaseImpl, bases<Base> >("BaseImpl");
}
"dispatch函数"是在派生类类型上"切换"以找出应该执行虚拟函数的哪个实现的实现。就像一个纯粹的虚拟函数。"转发函数"似乎指的是虚拟函数的默认(基类(实现。
我也觉得这个术语有点令人困惑。但它只用于传递Boost文档,我认为它在总体方案中并不重要。尽量不要挂断电话。