![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Frequently Asked QuestionsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 32. Boost.Signals
|
1. |
Повышен. Сигналы активно поддерживаются. |
Нет. Пожалуйста, перейдите наBoost.Signals2. В документации Signals2 есть руководствопо портированию. |
|
2. |
Не означает ли некопируемая семантика сигнала, что класс с членом сигнала также будет некопируемым? |
Нет. Компилятор не сможет сгенерировать конструктора копий или оператора присваивания копий для вашего класса, если он имеет сигнал в качестве участника, но вы можете написать свой собственный конструктор копий и / или оператора присваивания копий. Только не пытайтесь скопировать сигнал. |
|
3. |
Повышен. Сигналы безопасны? |
Нет, с помощью Boost. Сигналы в многопоточной концепции очень опасны, и очень вероятно, что результаты будут менее удовлетворительными. Повышаю. Сигналы будут поддерживать безопасность потока в будущем. |
|
4. |
Как получить Boost Сигналы для работы с Qt? |
При построении с помощью Qt ключевые слова Moc< Для Qt 4.1 и позже, Это поведение может быть отключено в Qt на основе каждого проекта или файла с опцией< 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. По сигналам пользователь может использовать обе системы с небольшими дополнительными усилиями. Есть два способа сделать это: Первый способ включает в себя определение макроса< namespace boost { namespace signals = BOOST_SIGNALS_NAMESPACE; } Второй способ, предложенный Фрэнком Гессом и усовершенствованный Нильсом Деккером, предполагает создание заголовка< #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, а затем обратитесь к ней в пространстве имен< |
Статья Frequently Asked Questions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 32. Boost.Signals может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 32. Boost.Signals ::
реклама |