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

Class template signalN

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 signalN

boost::signalN — Set of safe multicast callback types.

Synopsis

// In header: <boost/signal.hpp>
template<typename R, typename T1, typename T2, ..., typename TN, 
         typename Combiner = last_value<R>, typename Group = int, 
         typename GroupCompare = std::less<Group>, 
         typename SlotFunction = functionN<R, T1, T2, ..., TN> > 
class signalN : public signals::trackable,
                private noncopyable   // Exposition only
{
public:
  // types
  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 slot<SlotFunction>             slot_type;           
  typedef unspecified                    slot_result_type;    
  typedef unspecified                    slot_call_iterator;  
  typedef T1                             argument_type;         // If N == 1
  typedef T1                             first_argument_type;   // If N == 2
  typedef T2                             second_argument_type;  // If N == 2
  typedef T1                             arg1_type;           
  typedef T2                             arg2_type;           
     .
     .
     .
  typedef TN                             argN_type;           
  // static constants
  static const int arity = N;
  // construct/copy/destruct
  signalN(const combiner_type& = combiner_type(), 
          const group_compare_type& = group_compare_type());
  ~signalN();
  // connection management
  signals::connection 
  connect(const slot_type&, signals::connect_position = signals::at_back);
  signals::connection 
  connect(const group_type&, const slot_type&, 
          signals::connect_position = signals::at_back);
  void disconnect(const group_type&);
  template<typename Slot> void disconnect(const Slot&);
  void disconnect_all_slots();
  bool empty() const;
  std::size_t num_slots() const;
  // invocation
  result_type operator()(arg1_type, arg2_type, ..., argN_type);
  result_type operator()(arg1_type, arg2_type, ..., argN_type) const;
  // combiner access
  combiner_type& combiner();
  const combiner_type& combiner() const;
};

Description

Шаблон классасигнал Nохватывает несколько связанных классов сигнал0, сигнал1, сигнал2 и т.д., где суффикс числа описывает количество параметров функции сигнала и его подключенных слотов. Вместо того, чтобы перечислять все классы, один шаблонсигнал Nбудет описано, где N представляет число параметров функции.

signalN public construct/copy/destruct

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

    Эффекты:

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

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

  2. <
    ~signalN();
    >

    Эффекты:

    Отключает все слоты, подключенные к<*this>

signalN connection management

  1. <
    signals::connection
    connect(constslot_type&slot,
           signals::connect_positionat=signals::at_back);
    signals::connection
    connect(constgroup_type&group,constslot_type&slot,
           signals::connect_positionat=signals::at_back);
    >

    Эффекты:

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

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

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

    Броски:

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

    Сложность:

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

    Примечания:

    Не уточняется, приведет ли соединение слота во время вызова сигнала к немедленному вызову слота.
  2. <
    voiddisconnect(constgroup_type&group);
    template<typenameSlot>voiddisconnect(constSlot&slot);
    >

    Эффекты:

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

    Броски:

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

    Сложность:

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

    Эффекты:

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

    <this->empty()>.

    Броски:

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

    Сложность:

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

    Примечания:

    Может быть вызван в любое время в течение срока службы сигнала, в том числе во время вызовов в слоты сигнала.
  4. <
    boolempty()const;
    >

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

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

    Бросает:

    Не бросит.

    Сложность:

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

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

    Слоты могут отключаться в любой момент времени, в том числе при использовании тех же слотов. Поэтому возможно, что реализация должна искать через список отключенных слотов, чтобы определить, все ли слоты все еще подключены.
  5. <
    std::size_tnum_slots()const;
    >

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

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

    Бросок:

    Не бросит.

    Сложность:

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

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

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

signalN invocation

  1. <
    result_typeoperator()(arg1_typea1,arg2_typea2,...,argN_typeaN);
    result_typeoperator()(arg1_typea1,arg2_typea2,...,argN_typeaN)const;
    >

    Эффекты:

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

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

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

    Броски:

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

    Примечания:

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

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

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

signalN combiner access

  1. <
    combiner_type&combiner();
    constcombiner_type&combiner()const;
    >

    Возвращает:

    Ссылка на хранимый комбайн.

    Бросает:

    Не бросит.

PrevUpHomeNext

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




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



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


реклама


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

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