registered.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 112 行

HPP
112
字号
// Copyright David Abrahams 2002.// Distributed under 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)#ifndef REGISTERED_DWA2002710_HPP# define REGISTERED_DWA2002710_HPP# include <boost/python/type_id.hpp># include <boost/python/converter/registry.hpp># include <boost/python/converter/registrations.hpp># include <boost/type_traits/transform_traits.hpp># include <boost/type_traits/cv_traits.hpp># include <boost/type_traits/is_void.hpp># include <boost/detail/workaround.hpp># include <boost/python/type_id.hpp># include <boost/type.hpp>namespace boost {// You'll see shared_ptr mentioned in this header because we need to// note which types are shared_ptrs in their registrations, to// implement special shared_ptr handling for rvalue conversions.template <class T> class shared_ptr;namespace python { namespace converter { struct registration;namespace detail{  template <class T>  struct registered_base  {      static registration const& converters;  };}template <class T>struct registered  : detail::registered_base<        typename add_reference<            typename add_cv<T>::type        >::type    >{};# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \    && !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))// collapses a few more types to the same static instance.  MSVC7.1// fails to strip cv-qualification from array types in typeid.  For// some reason we can't use this collapse there or array converters// will not be found.template <class T>struct registered<T&>  : registered<T> {};# endif//// implementations//namespace detail{  inline void  register_shared_ptr0(...)  {  }    template <class T>  inline void  register_shared_ptr0(shared_ptr<T>*)  {      registry::lookup_shared_ptr(type_id<shared_ptr<T> >());  }    template <class T>  inline void  register_shared_ptr1(T const volatile*)  {      detail::register_shared_ptr0((T*)0);  }    template <class T>  inline registration const&   registry_lookup2(T&(*)())  {      detail::register_shared_ptr1((T*)0);      return registry::lookup(type_id<T&>());  }  template <class T>  inline registration const&   registry_lookup1(type<T>)  {      return registry_lookup2((T(*)())0);  }  inline registration const&   registry_lookup1(type<const volatile void>)  {      detail::register_shared_ptr1((void*)0);      return registry::lookup(type_id<void>());  }  template <class T>  registration const& registered_base<T>::converters = detail::registry_lookup1(type<T>());}}}} // namespace boost::python::converter#endif // REGISTERED_DWA2002710_HPP

⌨️ 快捷键说明

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