我有一个模板函数(通用函数找到最小值),看起来像这样:
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 的调用不应该是&#39它看起来像:
int smallest_matrix(const Matrix*a, int n){
minMatrixFunc f;
return findmin<Matrix, minMatrixFunc>(a,n,f);
}
其中 minMatrixFunc 是一个功能对象,右侧是运算符() ???
答案 0 :(得分:2)
这是正确的语法吗?
是
我不应该使用operator()
定义一个函数对象
你可以,但没必要。
您没有显示findmin
的定义。但据推测,您使用Func less
所做的只是使用function call operator:less( argument_list )
。如果是这样,只要重载决策找到匹配的参数列表,任何可调用类型都将执行。这包括pointers to functions,这是您使用过的。