realroot_doc 0.1.1
|
00001 #ifndef realroot_CONTAINER_TRAITS_H 00002 #define realroot_CONTAINER_TRAITS_H 00003 00004 namespace mmx { 00005 00006 namespace texp 00007 { 00008 template < class R, class X > 00009 struct instanceof { typedef null_t T; }; 00010 template < template<class> class R, class X, class Y> 00011 struct instanceof< R<X>, Y > { typedef R<Y> T; }; 00012 template< template<class,int> class R, int N, class X, class Y> 00013 struct instanceof< R<X,N>, Y> { typedef R<Y,N> T; }; 00014 template< template<class,unsigned> class R, unsigned N, class X, class Y> 00015 00016 struct instanceof< R<X,N>, Y> { typedef R<Y,N> T; }; 00017 // synaps view 00018 template< template<class,class> class V, class C, class R, class Y> 00019 struct instanceof< V<C,R>, Y > { typedef V<Y, typename instanceof<R,Y>::T > T; }; 00020 00021 template < class A, class B > 00022 struct sup_container { typedef A T; }; 00023 00024 template < class Container > 00025 struct value_type_{ typedef typename Container::value_type T; }; 00026 template< template<class X> class R, class X > 00027 struct value_type_< R<X> > { typedef X T; }; 00028 template< typename C, unsigned N > struct value_type_< C[N] > { typedef C T; }; 00029 template< typename C > struct value_type_<C*> { typedef C T; }; 00030 template< typename C > struct value_type_<const C*> { typedef C T; }; 00031 template < class Container > 00032 struct value_type { typedef typename value_type_< typename ucstref<Container>::T >::T T; }; 00033 }; 00034 00035 }// end namespace mmx 00036 00037 #endif