Здравствуйте Ed.ward, Вы писали:
EW>в этом случае гораздо удобнее воспользоваться интерфейсами, заводишь структуру типа этой
EW>ну а теперь любой кто хочет обрабатывать события от CSkinedWnd должен наследоваться от CSkinedWndEventsSink и реализовать его методы. А в рантайме где надо приконнектится, а где надо отконнектится
В том то и прелесть замыкания, что наследоваться ни от кого и не надо. Достаточно совпадения сигнатур. На практике разница будет заключаться в том, что с замыканием можно использовать классы, написанные до CSkinedWndEventsSink. Без замыканий — придется для существующих классов делать еще один подкласс, который реализует эти методы CSkinedWndEventsSink.
Решение без замыканий плохо масштабируется: при большом числе sink'ов возникнут трудности с тем, как устроить их иерархию, а именно следующая проблема дизайна: определить удачный интерфейс sink'a.
EW>это упрощенный вариант обработки событий успользуемый в COM, так что можешь почитать для ознакомления с оригиналом
В отсутствие замыканий, конечно, приходится пользоваться sink'ами.
PS. Кстати, кто-нибудь знает причину, что помешало ввести замыкания в C++?