⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signals_common.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
字号:
// 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#ifndef BOOST_SIGNALS_COMMON_HEADER#define BOOST_SIGNALS_COMMON_HEADER#ifndef BOOST_SIGNALS_NAMESPACE#  define BOOST_SIGNALS_NAMESPACE signals#endif#include <boost/type_traits/conversion_traits.hpp>#include <boost/ref.hpp>#include <boost/signals/detail/config.hpp>#ifdef BOOST_HAS_ABI_HEADERS#  include BOOST_ABI_PREFIX#endifnamespace boost {  namespace BOOST_SIGNALS_NAMESPACE {    namespace detail {      // The unusable class is a placeholder for unused function arguments      // It is also completely unusable except that it constructable from      // anything. This helps compilers without partial specialization      // handle slots returning void.      struct unusable {        unusable() {}      };      // Determine the result type of a slot call      template<typename R>      struct slot_result_type {        typedef R type;      };      template<>      struct slot_result_type<void> {        typedef unusable type;      };      // Determine if the given type T is a signal      class signal_base;      template<typename T>      struct is_signal {        BOOST_STATIC_CONSTANT(bool,          value = (is_convertible<T*, signal_base*>::value));      };      /*       * The IF implementation is temporary code. When a Boost metaprogramming       * library is introduced, Boost.Signals will use it instead.       */      namespace intimate {        struct SelectThen        {          template<typename Then, typename Else>          struct Result          {            typedef Then type;          };        };        struct SelectElse        {          template<typename Then, typename Else>          struct Result          {            typedef Else type;          };        };        template<bool Condition>        struct Selector        {          typedef SelectThen type;        };        template<>        struct Selector<false>        {          typedef SelectElse type;        };      } // end namespace intimate      template<bool Condition, typename Then, typename Else>      struct IF      {        typedef typename intimate::Selector<Condition>::type select;        typedef typename select::template Result<Then,Else>::type type;      };      // Determine if the incoming argument is a reference_wrapper#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION      template<typename T>      struct is_ref      {        BOOST_STATIC_CONSTANT(bool, value = false);      };      template<typename T>      struct is_ref<reference_wrapper<T> >      {        BOOST_STATIC_CONSTANT(bool, value = true);      };#else // no partial specialization      typedef char yes_type;      typedef double no_type;      no_type is_ref_tester(...);      template<typename T>      yes_type is_ref_tester(reference_wrapper<T>*);      template<typename T>      struct is_ref      {        static T* t;        BOOST_STATIC_CONSTANT(bool,          value = (sizeof(is_ref_tester(t)) == sizeof(yes_type)));      };#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION      // A slot can be a signal, a reference to a function object, or a      // function object.      struct signal_tag {};      struct reference_tag {};      struct value_tag {};      // Classify the given slot as a signal, a reference-to-slot, or a      // standard slot      template<typename S>      class get_slot_tag {        typedef typename IF<(is_signal<S>::value),                            signal_tag,                            value_tag>::type signal_or_value;      public:        typedef typename IF<(is_ref<S>::value),                            reference_tag,                            signal_or_value>::type type;      };      // Forward declaration needed in lots of places      class signal_base_impl;      class bound_objects_visitor;      class slot_base;    } // end namespace detail  } // end namespace BOOST_SIGNALS_NAMESPACE} // end namespace boost#ifdef BOOST_HAS_ABI_HEADERS#  include BOOST_ABI_SUFFIX#endif#endif // BOOST_SIGNALS_COMMON_HEADER

⌨️ 快捷键说明

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