2014-10-11 5 views
1

Я пишу класс соответствия SFINAE, который может соответствовать указателю на тип коллекции.Тип, который соответствует указателю на коллекции

В настоящее время мы имеем зЬй :: is_pointer, и я написал:

// SFINAE test for const_iterator for member type 
template <typename T> 
class has_const_iterator{ 
private: 
    typedef char True; 
    typedef long False; 

    template <typename C> static True test(typename C::const_iterator*) ; 
    template <typename C> static False test(...); 

public: 
    enum { value = sizeof(test<T>(0)) == sizeof(char) }; 
}; 

Как я могу использовать как зЬй :: is_pointer и has_const_iterator в станд :: enable_if или как я могу написать новые черты типа, которые может соответствовать указателю на тип коллекции? Благодарю.

ответ

5
template<class T> 
struct is_pointer_to_collection 
    : std::integral_constant<bool, std::is_pointer<T>::value 
      && has_const_iterator<typename std::remove_pointer<T>::type>::value> {}; 

Demo.