Wskaźnik na funkcję

0

Witajcie.
Ostatnio w mojej zacnej książce nauczyłem się czy przeczytałem o tworzeniu i wykorzystywaniu wskaźnika na funkcję.Ogólnie to musiałem sobie dopomóc internetem,gdyż w księdze zaklęć niezbyt zrozumiały zapis.Coś rozumiem.Lecz gdzie to mogę wykorzystać? Jak często się korzysta? Gdzieś w internecie wyczytałem że przykładowo funkcja qsort.Normalna funkcja jest dla mnie zrozumiała,ale jeśli przykładowo chce funkcję struktury to mi pokazuje błąd,dlaczego? Niżej napisze fragment kodu.Chyba że coś robię nie tak,to mówcie.

#include <iostream>
using namespace std;

struct point{
int x,y;
string show(int, int);
}pkt1;

int main(){
string (*wsk_f)(int, int);
wsk_f =  /// i tutaj problem, bo jak dam pkt1.show; to błąd,to co tu dać?

return 0;
}
2
  1. A co dałbyś przy każdym innym wskaźniku? Brakuje ci dereferencji. Albo wsk->cośstam albo (*wsk).cośtam
  2. Jest to przydatne kiedy chcesz przezkazać funkcje jako argument innej funkcji. Np. chcesz coś sortować i ale chcesz żeby "sposób porównywania" mógł być dowolnie ustalony przez użytkownika -> pozwalasz użytkownikowi przekazać do twojej funkcji sortującej funkcje która pozwala porównać ze sobą dwa obiekty, w taki sposób w jaki użytkownik chce. Jest to podstawa takiego wzorca jak map-filter-reduce.
0

Naucz się najpierw wskaźników do zwykłych funkcji, a nie do funkcji znajdujących się w klasach

1

Przykład

#include <iostream>
#include <functional>

using namespace std;

struct Point
{
    int x {1} , y {2};
    string calculate( int a , int b ){ return to_string(a*x+b*y); };
};

int main()
{
    Point point;
 
    string (Point::*pointer1)(int, int);
    pointer1 = &Point::calculate;
    cout << (point.*pointer1)(6,4) << endl;

    auto pointer2 = &Point::calculate;
    cout << (point.*pointer2)(1,2) << endl;

    cout << invoke(pointer2,point,3,3) << endl; // valid from C++17

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1