У меня есть функция, которая выводит значение value_one, если оно больше или меньше значения value_two на основе пройденного сравнения.
template<typename T, typename cmp = less<T> >
void function(T value_one, T value_two, cmp) {
cmp comparator;
if (comparator(value_one, value_two)) {
std::cout << value_one;
}
}
Теперь эта функция по умолчанию использует объект меньшего размера, чтобы решить распечатать value_one вне или нет, но также может использовать более функциональный объект.
template<typename T>
class more {
public:
bool operator()(const T& value_one, const T& value_two) {
return value_one > value_two;
}
};
template<typename T>
class less{
public:
bool operator()(const T& value_one, const T& value_two) {
return value_one < value_two;
}
};
, когда я вызываю следующий код в main
more<int> a;
function(7,5,a);
7 выводится, как ожидается, но следующий код считается недопустимым, и VS сообщает мне, что не может быть найдено никакой соответствующей перегруженной функции.
function(5,7);
Я думал, что объект функции cmp по умолчанию будет меньше, если явно не предоставлено, и, таким образом, все еще сможет работать. Почему это не работает? Есть ли способ заставить этот код работать без перегрузки, чтобы иметь только два параметра?