Вызов функции-шаблона - это законно?

У меня есть функция шаблона (общая функция, чтобы найти минимум), который выглядит так:

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 ), Если это так, любой вызываемый тип будет делать, пока разрешение перегрузки находит соответствующий список аргументов. Это включает в себя указатели на функции, которые вы использовали.

Другие вопросы по тегам