pointee.qbk 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. [section boost/python/pointee.hpp]
  2. [section Introduction]
  3. <boost/python/pointee.hpp> introduces a traits metafunction `template pointee<T>` that can be used to extract the "pointed-to" type from the type of a pointer or smart pointer.
  4. [endsect]
  5. [section Class template `pointee`]
  6. `pointee<T>` is used by the [link high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel `class_<...>`] template to deduce the type being held when a pointer or smart pointer type is used as its HeldType argument.
  7. ``
  8. namespace boost { namespace python
  9. {
  10. template <class T> struct pointee
  11. {
  12. typedef T::element_type type;
  13. };
  14. // specialization for pointers
  15. template <T> struct pointee<T*>
  16. {
  17. typedef T type;
  18. };
  19. }
  20. ``
  21. [endsect]
  22. [section Examples]
  23. Given a 3rd-party smart pointer type `smart_pointer<T>`, one might partially specialize `pointee<smart_pointer<T> >` so that it can be used as the HeldType for a class wrapper:
  24. ``
  25. #include <boost/python/pointee.hpp>
  26. #include <boost/python/class.hpp>
  27. #include <third_party_lib.hpp>
  28. namespace boost { namespace python
  29. {
  30. template <class T> struct pointee<smart_pointer<T> >
  31. {
  32. typedef T type;
  33. };
  34. }}
  35. BOOST_PYTHON_MODULE(pointee_demo)
  36. {
  37. class_<third_party_class, smart_pointer<third_party_class> >("third_party_class")
  38. .def(...)
  39. ...
  40. ;
  41. }
  42. ``
  43. [endsect]
  44. [endsect]