В моем коде на С++ я написал вот так:
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;
}
Но это не сработало, когда я назвал BestOfTwo (3, 5). Компилятор сказал мне, что никакой экземпляр перегрузки не совпал. Итак, теперь я должен написать это следующим образом:
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;
}
И это сработало без ошибок, когда я назвал BestOfTwo (3, 5). Но я думаю, что предыдущий стиль более удобен, и я не понял, где он поступил неправильно. Какие предложения?