#c #c 11 #templates #callable-object
#c #c 11 #шаблоны #вызываемый объект
Вопрос:
Сегодня я изучаю аргумент шаблона по умолчанию, и сначала все в порядке, но теперь я сталкиваюсь с некоторыми проблемами.
template <typename T, typename F = std::less<T>>
int compare(const T amp;v1, const T amp;v2, F f = F()) {
if (f(v1, v2)) return -1;
if (f(v2, v1)) return 1;
return 0;
}
Я знаю, что F
это тип вызываемого объекта и f
является вызываемым объектом, но что F()
это значит? Тип и operator()?
И что меня еще больше смущает, так это то, что F()
ничего не принимает, тогда как f(v1, v2)
принимает 2 объекта. Инициализация меня сильно смутила.
Если кто-нибудь может помочь мне разобраться в этих кодах, я был бы очень благодарен.Спасибо.
Комментарии:
1.
F()
является временным типомF
, созданным с помощью конструктора по умолчанию.f(v1, v2)
вызываетF::operator()
(который предположительно принимает два аргумента) объект типаF
.2. Вы даже можете объединить их и написать
F()(v1, v2)
— это создает временный объект, а затем немедленно вызываетoperator()
его. Примерно эквивалентноF temp; temp.operator()(v1, v2);
3. @IgorTandetnik Теперь я это полностью понимаю, спасибо!