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?
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.
Da Sie C ++ 11 verwenden, können Sie decltype
auf den Iterator selbst anwenden, um value_type
:
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.