2013-05-30 9 views
1

При использовании Boost.Signals boost позволяет получить от boost::signals::trackable, чтобы упростить управление жизненным циклом объекта/соединения (см. boost documentation).Как часто вывести из boost :: сигналы :: trackable?

Я нахожусь в ранней стадии моего проекта, и я имею в виду, нужно ли выводить из boost::signals::trackable в

  • каждый новый класс я пишу, что может использовать Boost.Signals в будущем
  • или только в классы Я уверен, что они будут нуждаться в функциональности trackable барельефа электронного класса

основной причиной го первого подхода было бы помешать мне забыть, вытекающие из boost::signals::trackable.

Также двойное deriverations как

class Foo : public Base, public boost::signals::trackable 
{ 
}; 

получает ненужным.

С другой стороны, предотвращение утечек памяти не должно быть основным аспектом дизайна. Тестирование и профилирование, такие как valgrind, должны использоваться для обнаружения утечек памяти.

Какой подход больше подходит для растущих проектов?

+1

Если вы беспокоитесь, возможно, напишите набор функций, которые вы всегда используете для подключения сигналов/слотов вместо прямого использования сигнала :: connect, в котором есть статическое утверждение, что класс должен быть получен из сигналов boost ::: : отслеживаются. Возможно, сигналы форсирования предлагают способ сделать это в любом случае. Таким образом, если вы забудете, ваш проект не будет компилироваться. – Pete

+1

Почему вы не используете 'Boost.Signals2', который имеет гораздо более гибкий и мощный механизм отслеживания? –

+0

@IgorR. Я не посмотрел на Boost.Signals2, потому что, хотя поддержка многопоточности замедлит мое приложение. Но, взглянув на [Управление соединением] (http://www.boost.org/doc/libs/1_49_0/doc/html/signals2/tutorial.html#id3151565), я собираюсь использовать «Boost .Signals2'. Спасибо! –

ответ

3

Отметьте, что Boost.Signals2 заменяет Boost.Signals. Он имеет гораздо более гибкий и мощный tracking mechanism.

Несмотря на то, что библиотека стремится обеспечить поточное решение для многопоточных программ, можно избежать блокировки накладных расходов в single-threaded environment, установив boost::signals2::dummy_mutex в качестве внутреннего мьютекса сигнала.

1

Qt в качестве альтернативного

Система Qt-Event навязывает программисту получить от QObject, так что вы на самом деле на стороне сохранения при использовании Qt-Events.