Vector Par wskaźników funkcji - problem

Odpowiedz Nowy wątek
2011-09-17 20:49
0

Mam taki problem... Mam pewien Vector... o taki:

std::vector< std::pair <Key, void (Game::*)()> > options;

I teraz mam pewien problem... W jaki sposób wywołać "n-tą" funkcję z tego Vectora? :/ Próbowałem już tak i siak i nie wychodzi. Nie miałem do czynienia wcześniej ze wskaźnikami do funkcji, stąd brak obycia. Próbowałem np tak:

options[n].second();

...ale nic z tego

Z góry dzięki za rychłą pomoc ;)

edytowany 1x, ostatnio: krzycho_666, 2011-09-17 20:50

Pozostało 580 znaków

2011-09-17 21:42
0

Wydawało się, że poprawnym rozw. problemu jest poniższy kod:

options[n].second;

... jednak ten mimo, iż się kompiluje, to nie przynosi efektów... Tzn n-ta metoda nie jest wykonywana... Zatem problem nadal otwarty... licze na Waszą pomoc

edytowany 1x, ostatnio: krzycho_666, 2011-09-18 00:25

Pozostało 580 znaków

2011-09-18 00:58
0

Możesz pokazać kod (przynajmniej kawałek)?
Wydaje mi się, że skoro jest to wektor wskaźników, to musisz wyłuskać z niego informacje poprzez '*'.


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

2011-09-18 02:19

@MJay: to nie jest wektor wskaźników

@krzycho_666: zauważ, że nie chcesz użyć zwykłego wskaźnika do funkcji(wtedy rzeczywiście wywołanie wyglądałoby tak: options[n].second(); ), ale wskaźnika do metody klasy. Zwykła funkcja od metody(nie statycznej) różni się dość znacząco(choćby konwencją wykonania i kwestią wskaźnika this).
Z powodu tych różnic zupełnie inaczej wygląda wywoływanie funkcji czy metody wykorzystując wskaźnik. Dla zwykłej funkcji jest to po prostu wsk();, ale już dla metody to (obiekt_klasy.*wsk)(); Metoda niestatyczna ZAWSZE musi być wywoływana na rzecz jakiegoś obiektu. To tyle jeżeli chodzi o wyjaśnienie co się dzieje i dlaczego Twoje wywołanie powinno wyglądać tak:

(obiekt_klasy_game.*options[n].second)();

edytowany 2x, ostatnio: byku_guzio, 2011-09-18 02:21

Pozostało 580 znaków

2011-09-18 02:52
0

Ha! ;D Jesteś dobry Kolego ;) Nie dość, że rozwiązanie problemu jak najbardziej poprawne, to w dodatku z doskonałym przypomnieniem co i jak ;)
Głupi jestem, że o tym nie pomyślałem... Dziękuję raz jeszcze =]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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