int (*cmp)(Type one, Type two)
Параметр с именем cmp
является указателем на функцию, возвращающую int
, которая принимает два параметра типа Type
.
struct Foo
{
int x;
};
int compare(Foo x, Foo y)
{
return (x.x == y.x) ? 0 : (x.x > y.x ? 1 : -1);
}
std::vector<Foo> vec;
FindMax<Foo>(vec, &compare);
Вам нужно cmp
, чтобы вы могли вызватьфункция сравнения внутри FindMax
:
template <typename Type>
Type FindMax (std::vector<Type> &myVec, int (*cmp)(Type one, Type two) = CallBack)
{
//whatever loop
max = cmp(myVec[i],myVec[j]) >= 0 ? myVec[i] : myVec[j];
}
EDIT Прерывание возврата:
return (x.x == y.x) ? 0 : (x.x > y.x ? 1 : -1);
?:
является троичным условным оператором.
condition ? expression1 : expression2
возвращает (свободно говоря) выражение1, если condition
верно, выражение2 в противном случае.
Так что это означает:
if (x.x == y.x)
return 0;
else
if (x.x > y.x)
return 1;
else
return -1;
Это то, что вы ожидаете от функции сравнения.Вернуть 0
для равенства, 1
, если первый элемент больше второго, и -1
для обратного.
РЕДАКТИРОВАТЬ 2
struct Foo
{
int x;
};
//Foo has a member x.
Foo f;
//Create a Foo object called f.
f.x;
//Access the member x of the object