Wskaźniki do funkcji - o co chodzi?

Odpowiedz Nowy wątek
2015-01-29 00:08
Chaki
0

Witam, mam pewien dylemat. Czytam aktualnie książkę Jerzego Grębosza Symfonia c++ i jestem w rozdziale o wskaźnikach do funkcji i tu taki wskaźnik wygląda np tak: int(wskaz_fun)(); A jak wyszukałem w internecie o tych wskaźnikach to są tam wskaźniki
np. typedef void (
foo)(void*,int);, i nie rozumiem o co tu chodzi z tym typedef'em. Wytłumaczy mi ktoś o co tu chodzi?
PS. Z góry dzięki. :D

Pozostało 580 znaków

2015-01-29 00:30
2

typedef pozwala zdefiniować typ, żeby później wygodnie użyć. Wyobraź sobie, że masz funkcję, która zwraca int i przyjmuje char jako parametr.
Może wyglądać np. tak:

int foo(char c) {}

Teraz jak chcesz mieć wskaźniki do takiej funkcji, to za każdym razem piszesz:

int (*funwsk1)(char) = foo;
int (*funwsk2)(char) = foo;

Nie jest to zbyt wygodne, szczególnie jak sygnatura funkcji może być dużo bardziej skomplikowana. Z typedef musisz to robić tylko raz:

typedef int (*funwsk)(char);
funwsk bar1 = foo;
funwsk bar2 = foo;
funwsk bar1000 = foo;

Pozostało 580 znaków

2015-01-29 09:51
0

Można użyć std::function który jest bardziej czytelny (ale trochę wolniejszy) niż zwykłe wskaźniki.

http://en.cppreference.com/w/cpp/utility/functional/function


Szacuje się, że w Polsce brakuje 50 tys. programistów
jesteś pewien, że jest wolniejszy? - krwq 2015-01-29 10:07
@krwq: to pewnie zależy od implementacji, ale o boost::function sam boost pisze że jest wolniejszy. Na msdn piszą że jest narzut "this". O tym ile rzeczy dodatkowo się dzieje w std::function jest tutaj: http://bit.ly/1DjlQ3C - vpiotr 2015-01-29 10:17
AFAIK samo wywołanie będzie albo takie samo albo minimalnie wolniejsze od wskaźnika. Za to rozmiar takiego obiektu jest większy i kopiowanie wolniejsze. (http://www.boost.org/doc/libs[...]0/doc/html/function/misc.html http://stackoverflow.com/ques[...]unction-pointer-and-void-this) - Endrju 2015-01-29 16:05

Pozostało 580 znaków

2015-01-29 10:39
0

A to po kolei te rozdziały czytasz? W rozdziale o typach (3.12, 73str) jest to opisane. Wydanie 3 rozszerzone

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: Bot