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

libs/signals2/example/disconnect_and_block.cpp

Boost , ,

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

libs/signals2/example/disconnect_and_block.cpp

// Various simple examples involving disconnecting and blocking slots.
// Copyright Douglas Gregor 2001-2004.
// Copyright Frank Mori Hess 2009.
//
// Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// For more information, see http://www.boost.org
#include <iostream>
#include <boost/signals2/signal.hpp>
#include <boost/signals2/shared_connection_block.hpp>
struct HelloWorld
{
  void operator()() const
  {
    std::cout << "Hello, World!" << std::endl;
  }
};
void disconnect_example()
{
  boost::signals2::signal<void ()> sig;
//[ disconnect_code_snippet
  boost::signals2::connection c = sig.connect(HelloWorld());
  std::cout << "c is connected\n";
  sig(); // Prints "Hello, World!"
  c.disconnect(); // Disconnect the HelloWorld object
  std::cout << "c is disconnected\n";
  sig(); // Does nothing: there are no connected slots
//]
}
void block_example()
{
  boost::signals2::signal<void ()> sig;
//[ block_code_snippet
  boost::signals2::connection c = sig.connect(HelloWorld());
  std::cout << "c is not blocked.\n";
  sig(); // Prints "Hello, World!"
  {
    boost::signals2::shared_connection_block block(c); // block the slot
    std::cout << "c is blocked.\n";
    sig(); // No output: the slot is blocked
  } // shared_connection_block going out of scope unblocks the slot
  std::cout << "c is not blocked.\n";
  sig(); // Prints "Hello, World!"}
//]
}
struct ShortLived
{
  void operator()() const
  {
    std::cout << "Life is short!" << std::endl;
  }
};
void scoped_connection_example()
{
  boost::signals2::signal<void ()> sig;
//[ scoped_connection_code_snippet
  {
    boost::signals2::scoped_connection c(sig.connect(ShortLived()));
    sig(); // will call ShortLived function object
  } // scoped_connection goes out of scope and disconnects
  sig(); // ShortLived function object no longer connected to sig
//]
}
//[ disconnect_by_slot_def_code_snippet
void foo() { std::cout << "foo"; }
void bar() { std::cout << "bar\n"; }
//]
void disconnect_by_slot_example()
{
  boost::signals2::signal<void()> sig;
//[ disconnect_by_slot_usage_code_snippet
  sig.connect(&foo);
  sig.connect(&bar);
  sig();
  // disconnects foo, but not bar
  sig.disconnect(&foo);
  sig();
//]
}
int main()
{
  std::cout << "Disconnect example:\n";
  disconnect_example();
  std::cout << "\nBlock example:\n";
  block_example();
  std::cout << "\nScoped connection example:\n";
  scoped_connection_example();
  std::cout << "\nDisconnect by slot example:\n";
  disconnect_by_slot_example();
  return 0;
}

Статья libs/signals2/example/disconnect_and_block.cpp раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:39:41/0.0056660175323486/0