Uporabite in razširite nalogo 5.1 po spodnjih navodilih.

Razširite nalogo tako, da v glavnem programu podprete spodnje klice metode sort, ki s pomočjo funkcije kot parameter sortira umetnine v galeriji na različne načine:

gallery.sort(ascendingYear);
cout << gallery.toString() << std::endl;
gallery.sort(descendingYear);
cout << gallery.toString() << std::endl;
gallery.sort(ascendingPrice);
cout << gallery.toString() << std::endl;

V ta namen zapišite naslednje:
    Dodajte metodo sort v razred Gallery:

void sort(bool (*c)(Artwork*, Artwork*));

Metoda sort uredi vector artworks v razredu Gallery, tako kot zahteva funkcija, ki jo prejme kot parameter.
    Za potrebe metode sort implementirajte še:

bool ascendingYear(Artwork* i, Artwork* j);
bool descandingYear(Artwork* i, Artwork* j);
bool ascendingPrice(Artwork* i, Artwork* j);

Funkcije implementirajte zunaj razreda Gallery.

V glavnem programu podprite naslednjo vrstico kode, ki poišče prvo umetnino, ki je iz renesančnega obdobja.

cout << gallery.find(isRenaissanceArt)->toString();

Potrebujemo naslednje:
    Dodajte metodo find v razred Gallery:

Artwork* find(bool (*c)(Artwork*));

Metoda find vrne prvi element vector-ja artworks v razredu Gallery, ki ustreza pogoju. Za implementacijo uporabite funkcijo find_if iz knjižnice algorithms: http://www.cplusplus.com/reference/algorithm/find_if/. Tretji parameter funkcije find_if je parameter metode find (glej zgoraj).

    Za potrebe metode find v glavnem programu implementirajte še:
        bool isRenaissanceArt(Artwork* a);

    Funkcija preveri, ali je letnica umetnine med 1400 in 1600.

V glavnem programu podprite naslednji vrstici kode, ki izpiše vse Painting umetnine iz galerije:

PrintIfPainting paint;
gallery.printArtworks(paint);

Potrebujemo naslednje:
    Dodajte metodo printArtworks v razred Gallery:

void printArtworks(PrintIfPainting i);

Metoda printArtworks izpiše vse umetnine v razredu Gallery, tako kot zahteva funkcijski tip PrintIfPainting, ki jo prejme kot parameter. Za implementacijo uporabite funkcijo for_each iz knjižnice algorithms: http://www.cplusplus.com/reference/algorithm/for_each/. Tretji parameter funkcije for_each je parameter metode printArtworks (glej zgoraj).
    Za potrebe funkcije for_each implementirajte razred PrintIfPainting ter prekrijte operator:

void operator()(Artwork* e);

V zgornji metodi boste potrebovali rezervirano besedo dynamic_cast ( primer: https://en.cppreference.com/w/cpp/language/dynamic_cast).

V glavnem programu demonstrirajte uporabo kazalcev na funkcije in funkcijske tipe.