У вас есть это:
template <class T> void sort(T x[], int n , bool(*whichCompare(T,T)))
{ /*...*/ }
Неверное объявление параметра для указателя на функцию, возвращающую bool
и два аргумента типа T
. Вы, вероятно, действительно хотели:
template <class T> void sort(T x[], int n , bool (*whichCompare)(T,T))
{ /*...*/ }
Хотя обычно такие функции написаны так:
template <class T, typename Functor>
void sort(T x[], int n , Functor whichCompare)
{
// ...
bool result = whichCompare(x[i], x[potentialSmallest]);
// ...
}
Таким образом, пользователи могут не только передавать указатели функций, но и функции объекты , которые обеспечивают operator()()
:
struct MyIntegerCompareFunctor
{
bool operator()(int a, int b) { return a < b; }
};
sort(intArray, 7, MyIntegerCompareFunctor());
sort(intArray, 7, &integerCompare); // Works too
Некоторые из алгоритмов, предоставляемых стандартными библиотеками C ++, написаны следующим образом.