Fehlerhafter Aufruf einer Funktion mit Standardparametern
-
Also , ich habe die Funktion foo:
template<class Iter,class Const_iter,class Ftor> void foo(Iter begin,Const_iter end,Ftor f=std::less<typename std::iterator_traits<Iter>::value_type>());
Allerdings scheitert ein Aufruf:
foo(vec.begin(),vec.end());
Vec ist ein Vector von ints. Fehler:
Fehler: keine passende Funktion für Aufruf von »foo(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >)«
foo(vec.begin(),vec.end(),std::less<int>());
klappt. Aber wie müsste foo dann aussehen?
-
Hallo,
ein Standardparameter wird nie für die Herleitung eines Template-Parameters verwendet.
-
Gibt es eine möglichkeit, dass Trotzdem zu bewerkstelligen?
template<class Iter,class Const_iter,class Ftor=std::less<typename std::iterator_traits<Iter>::value_type> > void foo(Iter begin,Const_iter end,Ftor f=std::less<typename std::iterator_traits<Iter>::value_type>());
klappt net...
template<class Iter,class Const_iter,class Ftor=std::less<typename std::iterator_traits<Iter>::value_type> > void foo(Iter begin,Const_iter end,Ftor f=Ftor());
auch net...
-
ness schrieb:
Gibt es eine möglichkeit, dass Trotzdem zu bewerkstelligen?
Ja. Nennt sich Überladung:
// generelle Version template<class Iter,class Const_iter,class Ftor> void foo(Iter begin,Const_iter end,Ftor f); // Überladung template<class Iter,class Const_iter> void foo(Iter begin,Const_iter end) { foo(begin, end, std::less<...>()); }
Btw: Default-Argumente für Template-Parameter (die in der Template-Parameterliste) sind bei Funktionstemplates nicht erlaubt.
-
Hm, die lösung ist so logisch, dass ich sie übersehen hab. Danke!