Re: Интерфейсы vs Делегаты.
От: bada  
Дата: 05.12.05 05:21
Оценка: :)
imho, на лицо некоторое непонимание основ.

Наследование (и виртуальные функции соответственно) является одним из основных инструментов, применяемых
в ОО парадигме. Использование виртуальных функций позволяет отделить абстракцию от ее конкретизаций/реализаций.
Таким образом наследование и виртуальные финкции — это фундаментальная фича языка С++ без которой невозможно
(читай очень геморно) писать объектно-ориентированные программы.

Функторы из области обобщенного программирования: очевидные применения — аргументы алгоритмов и т.п. Использование
функторов для формирования интерфейса неправильно (по крайней мере очень не в духе С++).

Здравствуйте, _Winnie, Вы писали:

_W>Под интерфейсами имею в виду базовые классы с абстрактными виртуальными функциями, а под делегатами всякие Loki::Functor/boost::function/Winnie::Closure.


_W>Что когда лучше использовать?

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

_W>Пока вижу только одно преимущество делегатов — их легко менять в runtime.

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

_W>Perfomance issues неинтересны, вроде бы они понятны.

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

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