Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Frequently Asked Questions

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 32. Boost.Signals

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Frequently Asked Questions

1. Повышен. Сигналы активно поддерживаются.
2. Не означает ли некопируемая семантика сигнала, что класс с членом сигнала также будет некопируемым?
3. Повышен. Сигналы безопасны?
4. Как получить Boost Сигналы для работы с Qt?

1.

Повышен. Сигналы активно поддерживаются.

Нет. Пожалуйста, перейдите наBoost.Signals2. В документации Signals2 есть руководствопо портированию.

2.

Не означает ли некопируемая семантика сигнала, что класс с членом сигнала также будет некопируемым?

Нет. Компилятор не сможет сгенерировать конструктора копий или оператора присваивания копий для вашего класса, если он имеет сигнал в качестве участника, но вы можете написать свой собственный конструктор копий и / или оператора присваивания копий. Только не пытайтесь скопировать сигнал.

3.

Повышен. Сигналы безопасны?

Нет, с помощью Boost. Сигналы в многопоточной концепции очень опасны, и очень вероятно, что результаты будут менее удовлетворительными. Повышаю. Сигналы будут поддерживать безопасность потока в будущем.

4.

Как получить Boost Сигналы для работы с Qt?

При построении с помощью Qt ключевые слова Moc<signals>и<slots>определяются с помощью препроцессорных макросов, в результате чего программы используют Boost. Сигналы и Qt вместе не компилируются.

Для Qt 4.1 и позже, Это поведение может быть отключено в Qt на основе каждого проекта или файла с опцией<no_keywords>. Это работает с нестандартными сборками Boost и Qt. Вам не нужно перенастраивать, перестраивать или дублировать существующие библиотеки. Для проекта, в котором вы хотите использовать обе опции. Сигналы и слоты Qt, соответствующая часть вашего файла .pro может выглядеть следующим образом:

CONFIG      += no_keywords # so Qt won't #define any non-all-caps `keywords'
INCLUDEPATH += . /usr/local/include/boost-1_33_1/
macx:LIBS   += /usr/local/lib/libboost_signals-1_33_1.a  # ...your exact paths may vary

Теперь вы можете смешать Boost. Сигналы и слоты Qt в одних и тех же файлах и даже в одном классе или функции. Вам придется использовать версии макросов Qt в своем собственном коде. Смотрите статьюБолее глубокий взгляд на сигналы и слоты[вне сайта] для более полных примеров и обзор сильных сторон двух систем.

Более старые версии Qtне обеспечивали надежного механизма для предотвращения этих недружественных, все более низкие макросы, подобные ключевым словам. Хотя это проблема с Qt, а не Boost. По сигналам пользователь может использовать обе системы с небольшими дополнительными усилиями. Есть два способа сделать это:

Первый способ включает в себя определение макроса<BOOST_SIGNALS_NAMESPACE>на какой-либо другой идентификатор (например,<signalslib>) при создании и использовании Boost. Библиотека сигналов. Затем пространство имен Роста. Библиотека сигналов будет<boost::BOOST_SIGNALS_NAMESPACE>вместо<boost::signals>. Чтобы сохранить оригинальное имя в единицах перевода, которые не взаимодействуют с Qt, вы можете использовать псевдоним пространства имен:

  namespace boost {
    namespace signals = BOOST_SIGNALS_NAMESPACE;
  }

Второй способ, предложенный Фрэнком Гессом и усовершенствованный Нильсом Деккером, предполагает создание заголовка<signalslib.hpp>, который содержит следующий код:

#ifndef SIGNALSLIB_HPP_INCLUDED
#define SIGNALSLIB_HPP_INCLUDED 
#if defined(signals) && defined(QOBJECTDEFS_H) && \
  !defined(QT_MOC_CPP)
#  undef signals
#  define signals signals
#endif
#include <boost/signal.hpp>
namespace boost
{
  namespace signalslib = signals;
}
#if defined(signals) && defined(QOBJECTDEFS_H) && \
  !defined(QT_MOC_CPP)
#  undef signals
// Restore the macro definition of "signals", as it was
// defined by Qt's <qobjectdefs.h>.
#  define signals protected
#endif
#endif

Используйте этот заголовок, чтобы включить библиотеку Boost, а затем обратитесь к ней в пространстве имен<boost::signalslib>. Этот вариант часто предпочтительнее первого, потому что его можно использовать без перекомпилирования бинарной библиотеки Сигналов.


PrevUpHomeNext

Статья Frequently Asked Questions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 32. Boost.Signals может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 32. Boost.Signals ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:21:59/0.028371095657349/1