trackable.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 60 行

CPP
60
字号
// Boost.Signals library// Copyright Douglas Gregor 2001-2004. 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#define BOOST_SIGNALS_SOURCE#include <boost/signals/trackable.hpp>#include <algorithm>namespace boost {  namespace BOOST_SIGNALS_NAMESPACE {    void trackable::signal_disconnected(void* obj, void* data)    {      trackable* self = reinterpret_cast<trackable*>(obj);      connection_iterator* signal =        reinterpret_cast<connection_iterator*>(data);      // If we're dying, don't bother erasing the connection from the list;      // it'll be gone anyway      if (!self->dying) {        self->connected_signals.erase(*signal);      }      // This iterator pointer won't ever be used again      delete signal;    }    void    trackable::signal_connected(connection c,                                BOOST_SIGNALS_NAMESPACE::detail::bound_object& binding) const    {      // Insert the connection      connection_iterator pos =        connected_signals.insert(connected_signals.end(), c);      // Make this copy of the object disconnect when destroyed      pos->set_controlling();      binding.obj = const_cast<void*>(reinterpret_cast<const void*>(this));      binding.data = reinterpret_cast<void*>(new connection_iterator(pos));      binding.disconnect = &signal_disconnected;    }    trackable::~trackable()    {      dying = true;    }  } // end namespace BOOST_SIGNALS_NAMESPACE}#ifndef BOOST_MSVC// Explicit instantiations to keep in the librarytemplate class std::list<boost::BOOST_SIGNALS_NAMESPACE::connection>;#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?