Это зависит.
Раньше меня это укусило, когда я хотел добавить какую-то особую логику каждый раз, когда объект подключается к сигналам другого объекта. Это наиболее вероятный случай, чтобы укусить вас.
Кроме того, это может затруднить точное отслеживание того, когда другие объекты подключаются к тому или иному объекту.
Я бы сказал, спрячьте соединения за функцией, чтобы быть в безопасности.
Я обычно использую макрос для определения функции vanilla.
#define SIGNAL(slot,name) connection name(function<slot> func) { return _##name##.connect(func);}
И затем в определении класса:
SIGNAL(void(),clicked)
Это предполагает, что вы следуете соглашению об именовании сигнала '_clicked', но вы можете заменить любое соглашение. Как правило, он поддерживает чистоту интерфейса для всех ваших классов. Если вы хотите добавить специальную логику подключения, вы можете это сделать без изменения всех других объектов, использующих сигнал.
ИЗМЕНИТЬ
Один случай был, когда сигнальный объект был фактически перемещен в реализацию делегата внутри другого класса, но для объектов по-прежнему имело смысл подключаться через исходный класс. Это сломало все места, которые пытались подключиться к нему. Если бы они использовали средства доступа к функциям для подключения, это было бы так же просто, как изменить функцию для поиска сигнала в делегате. Но как то это сломало всех пользователей исходного класса.
Или, когда я хотел логировать каждый раз, когда что-то подключается к определенному сигналу. Это было просто для целей отладки, но может быть очень полезно, если вы подозреваете, что происходит что-то шаткое, например, циклы в ваших сигнальных соединениях.
person
Community
schedule
14.02.2009