registered_pointee.hpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 REGISTERED_POINTEE_DWA2002710_HPP
  6. # define REGISTERED_POINTEE_DWA2002710_HPP
  7. # include <boost/python/converter/registered.hpp>
  8. # include <boost/python/converter/pointer_type_id.hpp>
  9. # include <boost/python/converter/registry.hpp>
  10. # include <boost/type_traits/transform_traits.hpp>
  11. # include <boost/type_traits/cv_traits.hpp>
  12. namespace boost { namespace python { namespace converter {
  13. struct registration;
  14. # ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  15. template <class T>
  16. struct registered_pointee
  17. : registered<
  18. typename remove_pointer<
  19. typename remove_cv<
  20. typename remove_reference<T>::type
  21. >::type
  22. >::type
  23. >
  24. {
  25. };
  26. # else
  27. namespace detail
  28. {
  29. template <class T>
  30. struct registered_pointee_base
  31. {
  32. static registration const& converters;
  33. };
  34. }
  35. template <class T>
  36. struct registered_pointee
  37. : detail::registered_pointee_base<
  38. typename add_reference<
  39. typename add_cv<T>::type
  40. >::type
  41. >
  42. {
  43. };
  44. //
  45. // implementations
  46. //
  47. namespace detail
  48. {
  49. template <class T>
  50. registration const& registered_pointee_base<T>::converters
  51. = registry::lookup(pointer_type_id<T>());
  52. }
  53. # endif
  54. }}} // namespace boost::python::converter
  55. #endif // REGISTERED_POINTEE_DWA2002710_HPP