STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
cast.h File Reference

Go to the source code of this file.

Functions

namespace __gnu_cxx _GLIBCXX_VISIBILITY (default)
 

Detailed Description

This is an internal header file, included by other library headers. Do not attempt to use it directly. {ext/pointer.h}

Function Documentation

namespace __gnu_cxx _GLIBCXX_VISIBILITY ( default  )

These functions are here to allow containers to support non standard pointer types. For normal pointers, these resolve to the use of the standard cast operation. For other types the functions will perform the apprpriate cast to/from the custom pointer class so long as that class meets the following conditions: 1) has a typedef element_type which names tehe type it points to. 2) has a get() const method which returns element_type*. 3) has a constructor which can take one element_type* argument.

This type supports the semantics of the pointer cast operators (below.)

Casting operations for cases where _FromType is not a standard pointer. _ToType can be a standard or non-standard pointer. Given that _FromType is not a pointer, it must have a get() method that returns the standard pointer equivalent of the address it points to, and must have an element_type typedef which names the type it points to.

Casting operations for cases where _FromType is a standard pointer. _ToType can be a standard or non-standard pointer.

34 {
35 _GLIBCXX_BEGIN_NAMESPACE_VERSION
36 
51  template<typename _ToType>
52  struct _Caster
53  { typedef typename _ToType::element_type* type; };
54 
55  template<typename _ToType>
56  struct _Caster<_ToType*>
57  { typedef _ToType* type; };
58 
66  template<typename _ToType, typename _FromType>
67  inline _ToType
68  __static_pointer_cast(const _FromType& __arg)
69  { return _ToType(static_cast<typename _Caster<_ToType>::
70  type>(__arg.get())); }
71 
72  template<typename _ToType, typename _FromType>
73  inline _ToType
74  __dynamic_pointer_cast(const _FromType& __arg)
75  { return _ToType(dynamic_cast<typename _Caster<_ToType>::
76  type>(__arg.get())); }
77 
78  template<typename _ToType, typename _FromType>
79  inline _ToType
80  __const_pointer_cast(const _FromType& __arg)
81  { return _ToType(const_cast<typename _Caster<_ToType>::
82  type>(__arg.get())); }
83 
84  template<typename _ToType, typename _FromType>
85  inline _ToType
86  __reinterpret_pointer_cast(const _FromType& __arg)
87  { return _ToType(reinterpret_cast<typename _Caster<_ToType>::
88  type>(__arg.get())); }
89 
94  template<typename _ToType, typename _FromType>
95  inline _ToType
96  __static_pointer_cast(_FromType* __arg)
97  { return _ToType(static_cast<typename _Caster<_ToType>::
98  type>(__arg)); }
99 
100  template<typename _ToType, typename _FromType>
101  inline _ToType
102  __dynamic_pointer_cast(_FromType* __arg)
103  { return _ToType(dynamic_cast<typename _Caster<_ToType>::
104  type>(__arg)); }
105 
106  template<typename _ToType, typename _FromType>
107  inline _ToType
108  __const_pointer_cast(_FromType* __arg)
109  { return _ToType(const_cast<typename _Caster<_ToType>::
110  type>(__arg)); }
111 
112  template<typename _ToType, typename _FromType>
113  inline _ToType
114  __reinterpret_pointer_cast(_FromType* __arg)
115  { return _ToType(reinterpret_cast<typename _Caster<_ToType>::
116  type>(__arg)); }
117 
118 _GLIBCXX_END_NAMESPACE_VERSION
119 } // namespace