Во-первых, не используйте Connect()
, который был заменен на Bind(), который лучше во всех отношениях.
Во-вторых, как статические (с использованием таблиц событий), так и динамические (с использованием Bind()
) методы обработки событий работают, и вы можете использовать то, что вы предпочитаете. Лично я рекомендую использовать Bind()
потому
- Это гораздо более гибким: может быть использован для подключения события на одном объекте в любой другой объект или даже свободной функции или, в C++ 11, a lambda.
- Это безопаснее и улавливает наиболее распространенные ошибки, такие как неправильная подпись обработчика события во время компиляции.
- Это «динамический», то есть вы можете в любое время подключить и отключить обработчик.
Основные преимущества таблицы событий, которые являются
- Они немного короче, особенно в предварительно версии 3.0.
- Они гораздо чаще встречаются в документации, примерах, учебниках, ... только потому, что у них было 15-летнее начало на
Bind()
.
Однако они более неудобны для использования, потому что они требуют подкласса (получения нового класса) объекта для обработки событий, отличных от команды, и они не обнаруживают всех ошибок во время компиляции, что позволяет писать код, который компилируется, но сбой во время выполнения.
Один запрос google позже: http://wxwidgets.blogspot.com/2007/01/in-praise-of-connect.html ;-) –
Собственно, вы не должны использовать ни один из них. Вместо этого используйте Bind/Unbind, это безопаснее, чем Connect/Disconnect, потому что они выполняют больше проверок времени компиляции. –
@ KristianDuske - знаете ли вы какие-либо примеры/учебники, в которых показано, как использовать Bind()? Я почти уверен, что как новичок я не смогу это выяснить самостоятельно. Спасибо. –