【问题标题】:What do you mean by dispatch function and forwarding function in Boost.Python?Boost.Python中的调度函数和转发函数是什么意思?
【发布时间】:2015-01-20 11:22:25
【问题描述】:

在重写类成员函数并围绕基类创建包装器时,谁能帮助我理解 Boost Python 中的调度函数和转发函数的含义?

可以在以下位置找到相同的示例:

Virtual Functions with Default Implementations

以下是无需转发功能即可正常工作的示例:

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");
}

【问题讨论】:

    标签: python c++ boost virtual overriding


    【解决方案1】:

    “调度函数”是在派生类类型上“切换”以找出应该执行哪个虚函数实现的实现。就像一个纯虚函数。 “转发函数”似乎是指虚函数的默认(基类)实现。

    我也觉得这个术语有点混乱。但它只在 Boost 文档中使用,我认为它在宏伟的计划中并不重要。尽量不要挂断电话。

    【讨论】:

    • 明知“dispatch function”切换到合适的虚函数实现,为什么不能自己选择基类默认实现,又为什么需要forwading函数。我已经用示例代码进行了测试,没有继承hierarchy的“转发功能”并将其暴露给python。它工作正常。我仍然不清楚是否需要“转发功能”
    • 也许是在没有基类实现的情况下(即它是纯虚拟的)?我不是 100% 确定。
    • 我在默认实现的基础中有虚函数。并且它在 Derived 类中被覆盖。同样的等级制度也暴露在 python 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多