Type Traits



  • Was kann man mit Type Traits machen? Nur sowas wie is_int usw. oder gibts da noch mehr?





  • Na schau dir mal std::advance an, da siehst du eine weitere Anwendung. Nämlich um gewisse Iteratoreeigenschaften zu definieren.



  • namespace std 
    {
        namespace tr1 
        {
            template <class _T, _T _V>
            struct integral_constant;
    
            typedef integral_constant<bool, true> true_type;
            typedef integral_constant<bool, false> false_type;
    
            // Unary Type Traits
            template <class _T> struct is_void;
            template <class _T> struct is_integral;
            template <class _T> struct is_floating_point;
            template <class _T> struct is_array;
            template <class _T> struct is_pointer;
            template <class _T> struct is_reference;
            template <class _T> struct is_member_object_pointer;
            template <class _T> struct is_member_function_pointer;
            template <class _T> struct is_enum;
            template <class _T> struct is_union;
            template <class _T> struct is_class;
            template <class _T> struct is_function;
    
            template <class _T> struct is_arithmetic;
            template <class _T> struct is_fundamental;
            template <class _T> struct is_object;
            template <class _T> struct is_scalar;
            template <class _T> struct is_compound;
            template <class _T> struct is_member_pointer;
    
            template <class _T> struct is_const;
            template <class _T> struct is_volatile;
            template <class _T> struct is_pod;
            template <class _T> struct is_empty;
            template <class _T> struct is_polymorphic;
            template <class _T> struct is_abstract;
            template <class _T> struct has_trivial_constructor;
            template <class _T> struct has_trivial_copy;
            template <class _T> struct has_trivial_assign;
            template <class _T> struct has_trivial_destructor;
            template <class _T> struct has_nothrow_constructor;
            template <class _T> struct has_nothrow_copy;
            template <class _T> struct has_nothrow_assign;
            template <class _T> struct has_virtual_destructor;
            template <class _T> struct is_signed;
            template <class _T> struct is_unsigned;
    
            template <class _T> struct alignment_of;
            template <class _T> struct rank;
            template <class _T, unsigned _I = 0> struct extent;
    
            // Binary Type Traits
            template <class _T, class _U> struct is_same;
            template <class _From, class _To> struct is_convertible;
            template <class _From, class _To> struct is_base_of;
    
            // Transformation Type Traits
            template <class _T> struct remove_const;
            template <class _T> struct remove_volatile;
            template <class _T> struct remove_cv;
            template <class _T> struct add_const;
            template <class _T> struct add_volatile;
            template <class _T> struct add_cv;
            template <class _T> struct remove_reference;
            template <class _T> struct add_reference;
            template <class _T> struct remove_pointer;
            template <class _T> struct add_pointer;
            template <class _T> struct remove_extent;
            template <class _T> struct remove_all_extents;
            template <std::size_t _Len, std::size_t _Align> struct aligned_storage;
        }
    }
    

    :xmas1: :xmas2:

    Edit: Peinlich, falsch formattiert 😮


Anmelden zum Antworten