ウィキペディアでこのコードを見つけました
class compare_class {
public:
bool operator()(int A, int B) const {
return A < B;
}
};
...
// Declaration of C++ sorting function.
template <class ComparisonFunctor>
void sort_ints(int* begin_items, int num_items, ComparisonFunctor c);
...
int main() {
int items[] = {4, 3, 1, 2};
compare_class functor;
sort_ints(items, sizeof(items)/sizeof(items[0]), functor);
}
最初は、ファンクターが括弧なしで sort_ints に記載されているときに、A および B パラメーターが operator()(int A, int B) にどのように渡されるのか疑問に思いました。
次に、 A と B が sort_ints 関数内の関数オブジェクトに渡されていることがわかりました。しかし、関数のアドレスを受け取っているので、sort_ints の宣言は「ComparisonFunctor c」ではなく「ComparisonFunctor* * * c」であるべきではないでしょうか?
sort_ints 関数内で、ファンクターへの関数呼び出しは次のようになりますか?
functor(*begin_items, *(begin_items+1));