Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Wskaźnik na funkcję w klasie

mistrz programowania 20 Kwi 2011 15:06 2286 5
  • #1 20 Kwi 2011 15:06
    mistrz programowania
    Poziom 1  

    Siemka, do projektu potrzebuję zrobić klasę w której funkcje można podmieniać w trakcie działania programu.

    Mam taki kod:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Gdy do wskaźnika przypisuję wolne funkcje, wszystko dziala jak należy, ale gdy próbuję do niego przypisać funkcję f3 która jest częścią klasy, już kompilator nie pozwala. Co jest nie tak i jak to obejść? Próbowałem też zrobić obiekt i przypisać wskaźnik do funkcji obiektu, ale też nie działa.

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. - arnoldziq

    1 5
  • #3 20 Kwi 2011 19:40
    krru
    Poziom 32  

    Metoda klasy to nie jest zwykła funkcja. Ma ona m.in. dodatkowy, niejawny parametr this (nie dotyczy metod statycznych).
    Wiec nie można mieszać funkcji i metod. Oczywiście istnieją wskaźniki na metody, ale
    to dość skomplikowana składnia i działa to jedynie w obrębie jednek klasy - metod z różnych klas nie da się używać w jednym miejscu.

    0
  • #5 20 Kwi 2011 21:21
    xarusx
    Poziom 13  

    Jeśli funkcja statyczna ci nie pasuje, użyj zaprzyjaźnienia:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #6 26 Kwi 2011 15:02
    utak3r
    Poziom 25  

    Przy okazji tego tematu, gdyby ktoś chciał zrobić funkcję typu callback, obsługiwany przez metodę konkretnego obiektu, odbije się znów od powyższego problemu - zwłaszcza, że ustanowienie metody statycznej nie wchodzi w grę. Ja to zwykłem robić w ten sposób, że deklaruję sobie metodę buforową:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    i w miejscu tworzenia wątku wołam:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W ten sposób callbackiem jest metoda konkretnej instancji, która normalnie może się odwoływać do wszelkich właściwości tego obiektu :)

    0