Nel seguente codice non capisco perchè nella chiamata al funtore
ComplexComparer() non vengono passate le due istanze a e b della classe Complex infatti dentro la parentesi non c'e' niente.
Se però si guarda la definizione dell'operatore
() si nota che prende due oggetti const Complex*.
Forse gli argomenti di ComplexComparer() sono impliciti ?
Ma come vengono determinati?
Sono forse le istanze di classe passate come parametri nella chiamata di max ?
Cioè questi max(
a,
b, ComplexComparer());
class ComplexComparer
{
public:
bool operator()(const Complex& a, const Complex& b);
};
bool ComplexComparer::operator()(const Complex& a, const Complex& b)
{
float magA = std::sqrt(a.getReal() * a.getReal() + a.getIm() * a.getIm());
float magB = std::sqrt(b.getReal() * b.getReal() + b.getIm() * b.getIm());
return magA < magB;
}
#include <iostream>
int main()
{
Complex a(1, 1.5);
Complex b(0.5f, 4);
Complex m = std::max(a, b, ComplexComparer());
std::cout << "max = " << m << std::endl;
return 0;
}