W moim kodu C++, pisałem tak:Domyślny parametr C++ w szablonie jest niedozwolony?
template <typename T, typename Pred>
inline const T BestOfTwo(const T& lhs, const T& rhs, Pred p = std::less<T>())
{
return p(lhs, rhs) ? lhs : rhs;
}
Ale to nie działa, gdy zadzwoniłem BestOfTwo (3, 5). Kompilator powiedział mi, że żadne wystąpienie przeciążenia nie pasuje. Więc teraz muszę napisać to tak:
template <typename T, typename Pred = std::less<T> >
inline const T BestOfTwo(const T& lhs, const T& rhs, Pred p = Pred())
{
return p(lhs, rhs) ? lhs : rhs;
}
I to działało bez błędu, gdy zadzwoniłem BestOfTwo (3, 5). Ale myślę, że poprzedni styl jest wygodniejszy i nie wiedziałem, gdzie poszło nie tak. Jakie są sugestie?
Prawdopodobny duplikat * [Wartość domyślna funkcji szablonu C++] (http://stackoverflow.com/questions/3301362/c-template-function-default-value) *. –