Интерфейсы vs Делегаты.
От: _Winnie Россия C++.freerun
Дата: 04.12.05 18:08
Оценка:
Под интерфейсами имею в виду базовые классы с абстрактными виртуальными функциями, а под делегатами всякие Loki::Functor/boost::function/Winnie::Closure.

Что когда лучше использовать?
Когда виртуальные функции абсолютно не катят, и можно использовать только функторы?

Пока вижу только одно преимущество делегатов — их легко менять в runtime.
Но базовые абстрактные классы легче отписывать
(Гы, попробуйте отписать указатель на свой метод bind(&Foo::Bar, this) из std::list<boost::function>. Как это сделать?)
Есть еще "псевдо-преимущество" — можно подписать чужой класс на событие. Но это редко нужно, и легко реализуется своей виртуальной функцией — переходником.

Perfomance issues неинтересны, вроде бы они понятны.
(большие vtbl при использовании очень больших интерфейсов, динамическая аллокация памяти при использовании boost::function).

Еще в boost::function можно засунуть не только пары (объект, метод) но и любой функтор, это мне тоже не интересно, интересны именно (объект, метод).
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.