-2

私はテンプレート関数(最小値を見つけるための一般的な関数)を持っています。これは次のようになります。

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){
     //...
}

それは正しい構文ですか?

less_matricesが行うブール値チェックを行う operator () を使用して関数オブジェクトを定義すべきではありませんか。また、 findminの呼び出しは次のようにすべきではありません。

 int smallest_matrix(const Matrix*a, int n){
    minMatrixFunc f;
    return findmin<Matrix, minMatrixFunc>(a,n,f);
}

ここで、minMatrixFuncは正しいoperator()を持つ関数オブジェクトです???

4

1 に答える 1

2

それは正しい構文ですか?

はい。

演算子 () を使用して関数オブジェクトを定義するべきではありませんか

可能ですが、必須ではありません。

の定義を示していませんfindmin。しかし、おそらく、関数呼び出し演算子Func lessを使用するだけです: . その場合、オーバーロードの解決で一致する引数リストが見つかる限り、任意の呼び出し可能な型で問題ありません。これには、使用した functions へのポインターが含まれます。less( argument_list )

于 2016-01-29T12:40:32.690 に答える