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

[

Синтаксический сахар длясвязывания(), когда конструктору передается более одного аргумента. Как будто:слот (буст::bind(f, a1, a2, ..., aN))

Class template slot

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 slot

boost::signals2::slot — Pass slots as function arguments, and associate tracked objects with a slot.

Synopsis

// In header: <boost/signals2/slot.hpp>
template<typename Signature, 
         typename SlotFunction = boost::function<R (T1, T2, ..., TN)> > 
class slot : public boost::signals2::slot_base {
public:
  // types
  typedef R            result_type;         
  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
  typedef Signature    signature_type;      
  typedef SlotFunction slot_function_type;  
  // static constants
  static const int arity = N;  // The number of arguments taken by the slot.
  // member classes/structs/unions
  template<unsigned n> 
  class arg {
  public:
    // types
    typedef Tn type;  // The type of the slot's (n+1)th argument
  };
  // construct/copy/destruct
  template<typename Slot> slot(const Slot &);
  template<typename OtherSignature, typename OtherSlotFunction> 
    slot(const slot<OtherSignature, OtherSlotFunction> &);
  template<typename Func, typename Arg1, typename Arg2, ..., typename ArgN> 
    slot(const Func &, const Arg1 &, const Arg2 &, ..., const ArgN &);
  // 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;
  // tracking
  slot & track(const weak_ptr<void> &);
  slot & track(const signals2::signal_base &);
  slot & track(const signals2::slot_base &);
  template<typename ForeignWeakPtr> 
    slot & track_foreign(const ForeignWeakPtr &, 
                         typename weak_ptr_traits<ForeignWeakPtr>::shared_type * = 0);
  template<typename ForeignSharedPtr> 
    slot & track_foreign(const ForeignSharedPtr &, 
                         typename shared_ptr_traits<ForeignSharedPtr>::weak_type * = 0);
  // slot function access
  slot_function_type & slot_function();
  const slot_function_type & slot_function() const;
};

Description

Слот состоит из полиморфной функциональной обертки (boost::function)по умолчанию плюс контейнерweak_ptrs, который идентифицирует «отслеженные объекты» слота. Если какой-либо из отслеживаемых объектов истекает, слот автоматически отключается. То есть оператор вызова функции слота бросит исключение вместо переадресации вызова функции в полиморфную обертку слота. Кроме того, слот автоматически блокирует все отслеживаемые объекты какshared_ptrво время вызова, чтобы предотвратить истечение срока действия любого из них при запуске полиморфной функциональной обертки.

Конструктор слота будет искатьсигналы2::сигналисигналы2::внутри входящих функциональных объектов и автоматически отслеживает их. Он делает это, применяя посетителя к входящим функторам сповышением::visit_each.

Template Parameters

  1. ФамилияПодпись

  2. ИмяСлотфункция=повышение::функция<RT1,T2,...TN>

slot public construct/copy/destruct

  1. шаблон<имя типаСлот>слотконстСлот&цель;

    Эффекты:

    Инициируетобъект SlotFunctionвэтотсцелью, который может быть любым функциональным объектом, с которым может быть построенобъект SlotFunction.

    В этом особом случае, когда параметр шаблонного типаSlotявляется совместимымсигналом2::сигналтипа, сигнал будет автоматически добавлен в список отслеживаемых объектов слота. В противном случае список отслеживаемых объектов слота изначально пуст.

  2. шаблон<типnameтипnameДругоеSlotFunction>слотconstслот<Другая слотФункция>&другой_slot;

    Эффекты:

    [

    Инициируетэтотс копиейother_slot'sOtherSlotFunctionи списком отслеживаемых объектов

  • шаблон<имя типаимя типаимя типаслот&]
  • slot invocation

    1. результат_типоператорНазывает слотСлотфункцияобъект.

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

      Результат возвращает объект слотаSlotFunction.

      Броски:

      Любые исключения, выброшенные объектом слотаSlotFunction.boost::signals2::expired_slot, если какой-либо объект в списке отслеживаемых объектов истек.

      Примечания:

      Если вы уже использовалиблокировкудля обеспечения достоверности отслеживаемых объектов, немного эффективнее использовать методslot_function() и напрямую вызывать слотSlotFunction

    .

    slot tracking

    1. слоттрек<void>>tracked_object]слотслоттрекконстслоттрекслабый_ptrслабый_ptr

      [5 Если какой-либо из отслеживаемых объектов истекает, то последующие попытки вызвать оператора слотаилизамок ()методы будут бросатьсигналы2::expired_slotисключение.

      При отслеживании сигнала для отслеживания используется общий_ptr, внутренний для класса сигнала. Сигнал не должен принадлежать внешнемуshared_ptr.

      В случае прохождения другого слота в качестве аргумента втрек(), только объекты, находящиеся в настоящее время в списке отслеживаемых объектов другого слота, добавляются в список отслеживаемых объектовэтого. Другой объект слота сам по себе не отслеживается.

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

      *это

    2. шаблон<имя типаForeignWeakPtr>слот&track_foreignconst&tracked_object&typenameweak_ptr_traits<ForeignWeakPtr>ForeignWeakPtr::shared_type*]шаблон<608]TypenameForeignSharedPtr>слот&track_foreignconst&tracked_object&typenameshared_ptr_traits<ForeignSharedPtr>weak_type
      Эффекты:

      [717 Методtrack_foreign() ведет себя аналогично вызову методаtrack() с помощью аргумента boost::shared_ptr или boost::weak_ptr. Однакоtrack_foreignболее гибок в том, что он будет приниматьshared_ptrилиweak_ptrклассы извне импульса (наиболее значительноstd::shared_ptrилиstd::weak_ptr).

      Для использования с этой функцией определенногокласса share_ptrдля него должна существовать специализация boost::signals2::shared_ptr_traits. Также должна быть предусмотрена специализация бустера::сигналы2::weak_ptr_traits для его соответствующегокласса weak_ptr. Специализацияshared_ptr_traitsдолжна включать в себяweak_typeчлен typedef, который определяет соответствующийweak_ptrтип классаshared_ptr. Аналогично, специализацияweak_ptr_traitsдолжна включать в себяshared_typeчлен typedef, который определяет соответствующийshared_ptrтип классаweak_ptr. Специализации дляstd::shared_ptrиstd::weak_ptrуже предоставляются библиотекой сигналов2. Для других классовshared_ptrнеобходимо предоставить специализацию.

      Второй аргумент «SFINAE» может быть проигнорирован, он используется для разрешения перегрузки междуshared_ptrилиweak_ptrобъектами, переданными в качестве первого аргумента.

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

      *это

    slot slot function access

    1. слот_функция_тип&слот_функция;констслот_функция_тип&слот_функцияконст;[896]

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

      [8 Ссылка на основной объект слот-функции.


    PrevUpHomeNext

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




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



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


    реклама


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

    Время компиляции файла: 2024-08-30 11:47:00
    2025-07-05 09:06:33/0.0081851482391357/0