Вызов функции-шаблона - это законно?
У меня есть функция шаблона (общая функция, чтобы найти минимум), который выглядит так:
template<class T, class Func>
int findmin(const T* a, int n, Func less){
//...
}
и звонок:
int smallest_matrix(const Matrix*a, int n){
return findmin(a,n,less_matrices);
}
где less_marices:
bool less_matrices(const Matrix& m1, const Matrix& m2){
//...
}
Это правильный синтаксис?
Разве я не должен определять объект-функцию с помощью operator (), который будет выполнять логическую проверку, которую выполняет less_matrices, и вызов findmin не должен выглядеть так:
int smallest_matrix(const Matrix*a, int n){
minMatrixFunc f;
return findmin<Matrix, minMatrixFunc>(a,n,f);
}
где minMatrixFunc - это объект-функция с правильным оператором ()???
1 ответ
Это правильный синтаксис?
Да.
Разве я не должен определять объект-функцию с помощью operator ()
Вы можете, но это не обязательно.
Вы не показываете определение findmin
, Но, по-видимому, все, что вы делаете с Func less
это использовать оператор вызова функции на нем: less( argument_list )
, Если это так, любой вызываемый тип будет делать, пока разрешение перегрузки находит соответствующий список аргументов. Это включает в себя указатели на функции, которые вы использовали.