对模板功能的调用 - 合法吗?

时间:2016-01-29 12:27:21

标签: c++ templates generic-programming function-object

我有一个模板函数(通用函数找到最小值),看起来像这样:

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 是一个功能对象,右侧是运算符() ???

1 个答案:

答案 0 :(得分:2)

  

这是正确的语法吗?

  

我不应该使用operator()

定义一个函数对象

你可以,但没必要。

您没有显示findmin的定义。但据推测,您使用Func less所做的只是使用function call operatorless( argument_list )。如果是这样,只要重载决策找到匹配的参数列表,任何可调用类型都将执行。这包括pointers to functions,这是您使用过的。