00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00048 #ifndef STLSOFT_INCL_STLSOFT_CONVERSION_HPP_ANY_CAST
00049 #define STLSOFT_INCL_STLSOFT_CONVERSION_HPP_ANY_CAST
00050 
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define STLSOFT_VER_STLSOFT_CONVERSION_HPP_ANY_CAST_MAJOR      4
00053 # define STLSOFT_VER_STLSOFT_CONVERSION_HPP_ANY_CAST_MINOR      0
00054 # define STLSOFT_VER_STLSOFT_CONVERSION_HPP_ANY_CAST_REVISION   1
00055 # define STLSOFT_VER_STLSOFT_CONVERSION_HPP_ANY_CAST_EDIT       33
00056 #endif 
00057 
00058 
00059 
00060 
00061 
00062 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00063 # include <stlsoft/stlsoft.h>
00064 #endif 
00065 
00066 
00067 
00068 
00069 
00070 #ifndef _STLSOFT_NO_NAMESPACE
00071 namespace stlsoft
00072 {
00073 #endif 
00074 
00075 
00076 
00077 
00078 
00084 template <ss_size_t N>
00085 struct any_caster_invalid_type
00086 {
00089 public:
00090     typedef any_caster_invalid_type<N>  class_type;
00092 
00095 #if defined(STLSOFT_CF_COMPILER_WARNS_NO_PUBLIC_DTOR)
00096 protected:
00097 #else 
00098 private:
00099 #endif 
00100     any_caster_invalid_type();
00101     any_caster_invalid_type(class_type const&);
00103 };
00104 
00116 template<   ss_typename_param_k T
00117         ,   ss_typename_param_k T1
00118         ,   ss_typename_param_k T2
00119         ,   ss_typename_param_k T3  =   any_caster_invalid_type<3>*
00120         ,   ss_typename_param_k T4  =   any_caster_invalid_type<4>*
00121         ,   ss_typename_param_k T5  =   any_caster_invalid_type<5>*
00122         ,   ss_typename_param_k T6  =   any_caster_invalid_type<6>*
00123         ,   ss_typename_param_k T7  =   any_caster_invalid_type<7>*
00124         ,   ss_typename_param_k T8  =   any_caster_invalid_type<8>*
00125         >
00126 union any_caster
00127 {
00130 public:
00131     typedef any_caster<T, T1, T2, T3, T4, T5, T6, T7, T8>   class_type;
00133 
00136 public:
00138     ss_explicit_k any_caster(T t_)
00139     {
00140         this->t = t_;
00141     }
00143 
00146 public:
00147     operator T1 () const
00148     {
00149         return t1;
00150     }
00151     operator T2 () const
00152     {
00153         return t2;
00154     }
00155     operator T3 () const
00156     {
00157         return t3;
00158     }
00159     operator T4 () const
00160     {
00161         return t4;
00162     }
00163     operator T5 () const
00164     {
00165         return t5;
00166     }
00167     operator T6 () const
00168     {
00169         return t6;
00170     }
00171     operator T7 () const
00172     {
00173         return t7;
00174     }
00175     operator T8 () const
00176     {
00177         return t8;
00178     }
00180 
00183 private:
00184     T   t;
00185     T1  t1;
00186     T2  t2;
00187     T3  t3;
00188     T4  t4;
00189     T5  t5;
00190     T6  t6;
00191     T7  t7;
00192     T8  t8;
00194 
00197 private:
00198     any_caster(class_type const& rhs);
00199     class_type& operator =(class_type const& rhs);
00201 };
00202 
00204 
00205 
00206 #ifdef STLSOFT_UNITTEST
00207 # include "./unittest/any_caster_unittest_.h"
00208 #endif 
00209 
00210 
00211 
00212 #ifndef _STLSOFT_NO_NAMESPACE
00213 } 
00214 #endif 
00215 
00216 
00217 
00218 #endif 
00219 
00220