Wie extrahiere ich den value_type aus den Template-Parametern (std :: vector und plain pointer)?

7

Ich habe eine Art mit der folgenden Schnittstelle:

%Vor%

Ich erwarte RandomIt als einen Iterator von std::vector<T>.begin()/end() oder einen einfachen Zeigertyp T* first,T* last . Ich denke, wenn ich annahme, dass RandomIt ein Vektor ist, kann ich es von RandomIt::value_type bekommen, aber dann funktioniert das nicht für T* first,T* last .

Meine Frage ist, wie kann ich die value_type T aus dem Template-Parameter in beiden Fällen extrahieren?

    
kfmfe04 21.01.2013, 04:45
quelle

2 Antworten

16

Verwenden Sie iterator_traits<T>::value_type ( cppreference ). Beachten Sie, dass die Standardbibliothek iterator_traits-Definitionen für T* und const T* bereitstellt. Daher funktioniert sie auch mit einfachen Zeigern.

    
rici 21.01.2013, 04:47
quelle
5

Da Sie C ++ 11 verwenden, können Sie decltype auf den Iterator selbst anwenden, um value_type :

zu erhalten %Vor%

Hinweis iterator_traits funktioniert möglicherweise nicht für vom Programmierer definierte Typen, wenn der Programmierer iterator_traits für seine Iteratoren nicht spezialisiert oder Iterator-Standardanforderungen nicht definiert.

Der decltype Trick funktioniert jedoch auch dann.

    
Nawaz 21.01.2013 05:04
quelle

Tags und Links