2010-07-23 2 views
1

я определил сигнал в MyApp и излучают его в самых разных местах в коде, но мне это нужно только тогда, когда мой MY_DEFINED_FLAG определяется, на мой вопрос:
ли я должен изменить каждый:Излучает отключенный сигнал плохо?

emit mySignal(); 

в

#ifdef MY_DEFINED_FLAG 
emit mySignal(); 
#endif 

?

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

ответ

2

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

1

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

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

+0

«сигналы для целей отладки» на самом деле не имеет никакого смысла, я бы сказал. –

+0

Нет, это не отладка цели, это задача совместимости. –

1

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

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

if (MY_DEFINED_FLAG) 
    connect(this, SIGNAL(mySignal()), this, SLOT(mySlot()); 
Смежные вопросы