Что вы подразумеваете под диспетчерской функцией и функцией пересылки в 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, и я не думаю, что это очень важно в общей схеме вещей. Постарайтесь не зацикливаться на этом.