C++ 对模板函数的调用-合法吗?

C++ 对模板函数的调用-合法吗?,c++,templates,generic-programming,function-object,C++,Templates,Generic Programming,Function Object,我有一个模板函数(generic func查找最小值),如下所示: template<class T, class Func> int findmin(const T* a, int n, Func less){ //... } 其中少部分是: bool less_matrices(const Matrix& m1, const Matrix& m2){ //... } 这是正确的语法吗 我是否应该用操作符()定义一个函数对象,它将执行less_m

我有一个模板函数(generic func查找最小值),如下所示:

template<class T, class Func>
int findmin(const T* a, int n, Func less){
   //...
}
其中少部分是:

bool less_matrices(const Matrix& m1, const Matrix& m2){
     //...
}
这是正确的语法吗

我是否应该用操作符()定义一个函数对象,它将执行less_matrix执行的布尔检查,调用findmin是否应该如下所示:

 int smallest_matrix(const Matrix*a, int n){
    minMatrixFunc f;
    return findmin<Matrix, minMatrixFunc>(a,n,f);
}
int最小_矩阵(常数矩阵*a,int n){
minMatrixFunc f;
返回findmin(a,n,f);
}
其中,minMatrixFunc是一个具有右运算符()的函数对象

这是正确的语法吗

我不应该用运算符()定义函数对象吗

你可以,但没必要


您不显示
findmin
的定义。但是可以想见,使用
Func-less
所做的一切就是在其上使用:
less(参数列表)
。如果是这样,只要重载解析找到匹配的参数列表,任何可调用类型都可以。这包括,这是您所使用的。

不,您也可以像以前一样传递函数。任何“可调用”的东西都可以。
 int smallest_matrix(const Matrix*a, int n){
    minMatrixFunc f;
    return findmin<Matrix, minMatrixFunc>(a,n,f);
}