Что вы подразумеваете под диспетчерской функцией и функцией пересылки в Boost.Python?

Может ли кто-нибудь помочь мне понять, что означают диспетчерские функции и функции пересылки в 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");
}

1 ответ

"Функция диспетчеризации" - это реализация, которая "переключает" тип производного класса, чтобы определить, какая реализация виртуальной функции должна выполняться. Как чисто виртуальная функция. "Функция пересылки", по-видимому, относится к реализации виртуальной функции по умолчанию (базовый класс).

Я тоже нахожу эту терминологию немного запутанной. Но это используется только в передаче в документации Boost, и я не думаю, что это очень важно в общей схеме вещей. Постарайтесь не зацикливаться на этом.

Другие вопросы по тегам