Является ли испускание отключенного сигнала плохим? - PullRequest
1 голос
/ 23 июля 2010

Я определил сигнал в myapp и испустил его в самых разных местах кода, но он мне нужен, только когда определен мой MY_DEFINED_FLAG, мой вопрос:
Должен ли я изменить каждый:

emit mySignal();

до

#ifdef MY_DEFINED_FLAG
emit mySignal();
#endif

а если ответ "да", тогда есть ли лучшая идея?

Ответы [ 3 ]

2 голосов
/ 23 июля 2010

Класс, который излучает сигнал, не должен заботиться о том, слушает кто-нибудь или нет.Пользователи класса подключаются к сигналам, если им это нужно, или нет.Может быть, им просто нужно подключиться к некоторым из них.Нет никакого вреда для сигнала, с которым никто не связан, сам звонок дешевый.Это похоже на любую другую часть API: сигналы являются частью дизайна интерфейса, службой, предоставляемой классом пользователям, которые могут использовать эту часть API или нет, что является их собственным делом.

1 голос
/ 23 июля 2010

Нет, испускание сигнала, который был отключен, не плохо, это вполне ожидаемо. Сам Qt делает это все время.

В этом случае я бы поместил соединение только в #ifdef или, в идеале, просто внутри что-то вроде этого:

if (MY_DEFINED_FLAG)
    connect(this, SIGNAL(mySignal()), this, SLOT(mySlot());
1 голос
/ 23 июля 2010

Передача сигнала, который не подключен к какому-либо ресиверу / слоту, абсолютно безвредна (за исключением редкого случая, когда вы чрезмерно беспокоитесь о производительности, но излучение сигнала действительно довольно дешево).

Отключение некоторых сигналов во время компиляции (с использованием директивы предварительной обработки, как вы предложили), вероятно, только в том случае, если у вас есть несколько сигналов для целей отладки в вашем коде, которые вы не хотите излучать в финальной версиирелиз.

...