source: NonGTP/Boost/boost/python/converter/pointer_type_id.hpp @ 857

Revision 857, 1.7 KB checked in by igarcia, 18 years ago (diff)
Line 
1// Copyright David Abrahams 2002.
2// Distributed under the Boost Software License, Version 1.0. (See
3// accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5#ifndef POINTER_TYPE_ID_DWA2002222_HPP
6# define POINTER_TYPE_ID_DWA2002222_HPP
7
8# include <boost/python/type_id.hpp>
9# include <boost/type_traits/composite_traits.hpp>
10
11namespace boost { namespace python { namespace converter {
12
13namespace detail
14{
15  template <bool is_ref = false>
16  struct pointer_typeid_select
17  {
18      template <class T>
19      static inline type_info execute(T*(*)() = 0)
20      {
21          return type_id<T>();
22      }
23  };
24
25  template <>
26  struct pointer_typeid_select<true>
27  {
28      template <class T>
29      static inline type_info execute(T* const volatile&(*)() = 0)
30      {
31          return type_id<T>();
32      }
33   
34      template <class T>
35      static inline type_info execute(T*volatile&(*)() = 0)
36      {
37          return type_id<T>();
38      }
39   
40      template <class T>
41      static inline type_info execute(T*const&(*)() = 0)
42      {
43          return type_id<T>();
44      }
45
46      template <class T>
47      static inline type_info execute(T*&(*)() = 0)
48      {
49          return type_id<T>();
50      }
51  };
52}
53
54// Usage: pointer_type_id<T>()
55//
56// Returns a type_info associated with the type pointed
57// to by T, which may be a pointer or a reference to a pointer.
58template <class T>
59type_info pointer_type_id(T(*)() = 0)
60{
61    return detail::pointer_typeid_select<
62          is_reference<T>::value
63        >::execute((T(*)())0);
64}
65
66}}} // namespace boost::python::converter
67
68#endif // POINTER_TYPE_ID_DWA2002222_HPP
Note: See TracBrowser for help on using the repository browser.