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

Class template signal

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

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

Class template signal

boost::signals2::signal — Safe multicast callback.

Synopsis

// In header: <boost/signals2/signal.hpp>
template<typename Signature, 
         typename Combiner = boost::signals2::optional_last_value<R>, 
         typename Group = int, typename GroupCompare = std::less<Group>, 
         typename SlotFunction = boost::function<Signature>, 
         typename ExtendedSlotFunction = boost::function<R (const connection &, T1, T2, ..., TN)>, 
         typename Mutex = boost::signals2::mutex> 
class signal : public boost::signals2::signal_base {
public:
  // types
  typedef Signature                                                                          signature_type;             
  typedef typename Combiner::result_type                                                     result_type;                
  typedef Combiner                                                                           combiner_type;              
  typedef Group                                                                              group_type;                 
  typedef GroupCompare                                                                       group_compare_type;         
  typedef SlotFunction                                                                       slot_function_type;         
  typedef typename signals2::slot<Signature, SlotFunction>                                   slot_type;                  
  typedef ExtendedSlotFunction                                                               extended_slot_function_type;
  typedef typename signals2::slot<R (const connection &, T1, ..., TN), ExtendedSlotFunction> extended_slot_type;         
  typedef typename SlotFunction::result_type                                                 slot_result_type;           
  typedef unspecified                                                                        slot_call_iterator;         
  typedef T1                                                                                 argument_type;                // Exists iff arity == 1
  typedef T1                                                                                 first_argument_type;          // Exists iff arity == 2
  typedef T2                                                                                 second_argument_type;         // Exists iff arity == 2
  // static constants
  static const int arity = N;  // The number of arguments taken by the signal.
  // member classes/structs/unions
  template<unsigned n> 
  class arg {
  public:
    // types
    typedef Tn type;  // The type of the signal's (n+1)th argument
  };
  // construct/copy/destruct
  signal(const combiner_type& = combiner_type(), 
         const group_compare_type& = group_compare_type());
  signal(signal &&);
  signal& operator=(signal &&);
  // connection management
  connection connect(const slot_type&, connect_position = at_back);
  connection connect(const group_type&, const slot_type&, 
                     connect_position = at_back);
  connection connect_extended(const extended_slot_type&, 
                              connect_position = at_back);
  connection connect_extended(const group_type&, const extended_slot_type&, 
                              connect_position = at_back);
  void disconnect(const group_type&);
  template<typename S> void disconnect(const S&);
  void disconnect_all_slots();
  bool empty() const;
  std::size_t num_slots() const;
  // invocation
  result_type operator()(arg<0>::type, arg<1>::type, ..., arg<N-1>::type);
  result_type operator()(arg<0>::type, arg<1>::type, ..., arg<N-1>::type) const;
  // combiner access
  combiner_type combiner() const;
  void set_combiner(const combiner_type&);
  // modifiers
  void swap(signal&);
};
// specialized algorithms
template<typename Signature, typename Combiner, typename Group, 
         typename GroupCompare, typename SlotFunction, 
         typename ExtendedSlotFunction, typename Mutex> 
  void swap(signal<Signature, Combiner, Group, GroupCompare, SlotFunction, ExtendedSlotFunction, Mutex>&, 
            signal<Signature, Combiner, Group, GroupCompare, SlotFunction, ExtendedSlotFunction, Mutex>&);

Description

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

Template Parameters

  1. <
    typenameSignature
    >

  2. <
    typenameCombiner=boost::signals2::optional_last_value<R>
    >
  3. <
    typenameGroup=int
    >
  4. <
    typenameGroupCompare=std::less<Group>
    >
  5. <
    typenameSlotFunction=boost::function<Signature>
    >
  6. <
    typenameExtendedSlotFunction=boost::function<R(constconnection&,T1,T2,...,TN)>
    >
  7. <
    typenameMutex=boost::signals2::mutex
    >

signal public types

  1. typedeftypenamesignal2::slot<Rconstсоединение&,T1,......TN,TN,ExtendedSlotFunction>extended_slot_type;

    Слоты<extended_slot_type>могут быть соединены с сигналом с использованием методовconnect_extended.<extended_slot_type>имеет дополнительныйсигнал2::соединениев своей подписи, что дает функциям слота доступ к их соединению с сигналом, вызывающим их.

  2. typedeftypenameSlotFunction::result_typeslot_result_type;

    Это тип, возвращаемый при отнесении входных итераторов к комбинатору сигнала.

  3. typedefunspecifiedslot_call_iterator;

    Тип входного итератора передается комбинатору при вызове сигнала.

signal public construct/copy/destruct

  1. <
    signal(constcombiner_type&combiner=combiner_type(),
          constgroup_compare_type&compare=group_compare_type());
    >

    Эффекты:

    Инициализирует сигнал, не содержащий слотов, копирует данный комбинатор во внутреннее хранилище и сохраняет заданный объект функции сравнения групп для сравнения групп.

    Постусловия:

    <this->empty()>

  2. <
    signal(signal&&other);
    >

    Переместить конструктор.

    Постусловия:

    Сигнал<other>находится в состоянии «перемещения», когда он может быть только уничтожен, заменен или перемещен. Любая другая операция на сигнале «отклоняется» недействительна.

    Броски:

    Не бросит

    .
  3. <
    signal&operator=(signal&&rhs);
    >

    Переместить назначение.

    Последующие условия:

    Сигнал<rhs>находится в состоянии «перемещения», когда он может быть только уничтожен, заменен или перемещен. Любая другая операция на сигнале «отклоняется» недействительна.

    Броски:

signal connection management

  1. <
    connectionconnect(constslot_type&slot,connect_positionat=at_back);
    connectionconnect(constgroup_type&group,constslot_type&slot,
                      connect_positionat=at_back);
    >

    Эффекты:

    Подключает сигнал к входящему слоту. Если слот неактивен, т.е. любой из отслеживаемых объектов слотов был уничтожен, то вызов на соединение является безоперационным. Если используется вторая версия<connect>, слот связан с данной группой. Параметр<at>указывает, где слот должен быть подключен:<at_front>указывает, что слот будет подключен в передней части списка или группы слотов, и<at_back>указывает, что слот будет подключен в задней части списка или группы слотов.

    Возвращается:

    Объект<signals2::connection>, который ссылается на вновь созданное соединение между сигналом и слотом; если слот неактивен, возвращает отключенное соединение.

    Броски:

    Эта процедура соответствует строгой гарантии исключения, когда любое исключение приведет к тому, что слот не будет подключен к сигналу.

    Сложность:

    Постоянное время при подключении слота без названия группы или логарифмического в количестве групп при подключении к конкретной группе.

    Примечания:

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

  2. <
    connectionconnect_extended(constextended_slot_type&slot,
                               connect_positionat=at_back);
    connectionconnect_extended(constgroup_type&group,
                               constextended_slot_type&slot,
                               connect_positionat=at_back);
    >

    Методы<connect_extended>работают так же, как методы<connect>, за исключением слотов типа<extended_slot_type>. Это полезно, если слот должен получить доступ к соединению между ним и сигналом, вызывающим его, например, если он хочет отключить или заблокировать свое собственное соединение.

  3. <
    voiddisconnect(constgroup_type&group);
    template<typenameS>voiddisconnect(constS&slot_func);
    >

    Эффекты:

    Если параметр является (конвертируемым) именем группы, любые слоты в данной группе отключаются. В противном случае любые слоты, равные данной функции слота, отключаются.

    Обратите внимание, что аргумент<slot_func>должен быть не фактическимсигналом2::слотобъект (который даже не поддерживает<operator==>), а скорее функтором, который вы завернули внутрисигнала2::слот, когда вы изначально сделали соединение.

    Броски:

    Бросок не будет производиться, если не будет броска деструктора пользователя или оператора равенства<==>. Если оба броска, не все слоты могут быть отключены.

    Сложность:

    Если дана группа, O(lg g) + k, где g - число групп в сигнале и k - число слотов в группе. В противном случае линейно количество слотов, подключенных к сигналу.

  4. <
    voiddisconnect_all_slots();
    >

    Эффекты:

    Отключает все слоты, подключенные к сигналу.

    <this->empty()>.

    Броски:

    Если отключение слота вызывает исключение, не все слоты могут быть отключены.

    Сложность:

    Линейное число слотов, известных сигналу.

    Примечания:

    Могут быть вызваны в любое время в течение срока действия сигнала, в том числе во время вызовов в слоты сигнала.

  5. <
    boolempty()const;
    >

    Возвращается:

    <true>, если к сигналу не подключены слоты, и<false>в противном случае.

    Бросает:

    Не бросит.

    Сложность:

    Линейный по числу слотов, известных сигналу.

    Обоснование:

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

  6. <
    std::size_tnum_slots()const;
    >

    Возвращение:

    Количество слотов, подключенных к сигналу

    Бросок:

    Сложность:

    Линейное число слотов, известных сигналу.

    Обоснование:

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

signal invocation

  1. <
    result_typeoperator()(arg<0>::typea1,arg<1>::typea2,...,
                          arg<N-1>::typeaN);
    result_typeoperator()(arg<0>::typea1,arg<1>::typea2,...,
                          arg<N-1>::typeaN)const;
    >

    Эффекты:

    Взывает комбинатор с диапазоном<slot_call_iterator>[первый, последний], соответствующим последовательности вызовов к слотам, подключенным к сигналу<*this>. Отклонение итератора в этом диапазоне вызывает вызов слота с заданным набором параметров<(a1, a2, ..., aN)>, результат которого возвращается из операции отсчета итератора.

    Возвращение:

    Результат возвращается комбинатором.

    Броски:

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

    Примечания:

    Будут задействованы только слоты, связанные с итераторами, которые фактически исключены. Множественные отступления одного и того же итератора не приведут к нескольким вызовам слота, потому что обратная стоимость слота будет кэшироваться.

    <const>версия оператора вызова функции вызовет комбинатор как<const>, тогда как не<const>версия вызовет комбинатор как не<const>.

signal combiner access

  1. <
    combiner_typecombiner()const;
    >

    Бросок:

    Возврат:

    Копия хранимого комбинатора.

    Не бросит.

  2. <
    voidset_combiner(constcombiner_type&combiner);
    >

    Эффекты:

    Копии нового комбинатора в сигнал для использования с будущими вызовами сигнала.

    Броски:

    Не бросит.

signal modifiers

  1. <
    voidswap(signal&other);
    >

Эффекты:

Переключает сигнал, указанный в<this>и<other>.

Бросает:

Не буду бросать.

signal specialized algorithms

  1. <
    template<typenameSignature,typenameCombiner,typenameGroup,
            typenameGroupCompare,typenameSlotFunction,
            typenameExtendedSlotFunction,typenameMutex>
     voidswap(signal<Signature,Combiner,Group,GroupCompare,SlotFunction,ExtendedSlotFunction,Mutex>&x,
               signal<Signature,Combiner,Group,GroupCompare,SlotFunction,ExtendedSlotFunction,Mutex>&y);
    >

    Эффекты:

    <x.swap(y)>

    Броски:

    Не буду бросать.


PrevUpHomeNext

Статья Class template signal раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Reference ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 22:53:30/0.029645919799805/1