Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wskaźnik na funkcję, przekazywanie funkcji przez argument

Ostatnio zmodyfikowano 2012-01-03 17:23
Autor Wiadomość
wizardus
Temat założony przez niniejszego użytkownika
Wskaźnik na funkcję, przekazywanie funkcji przez argument
» 2012-01-03 16:39:54
Witam.

Mam takie drobne pytanie. Czy jest możliwa taka akcja:

1. Mamy jakąś klasę
2. Przekazujemy wskaźnik na DOWOLNĄ funkcję przez metodę tej klasy
3. Klasa korzysta z tej funkcji :)

Niby tak prosto wytłumaczone, ale ogólnie, chcę zrobić (tak o dla siebie) coś takiego jak system sygnałów i slotów w Qt. Mianowicie mam klasę PButton i chcę aby miała ona metodę OnClick która wywoływałaby wcześniej zadeklarowaną przezemnie funkcję.

Problemem jest to, że wskaźnik na funkcję musi być określony z parametrami jak dobrze rozumiem, tj. jeśli chcę aby funkcja przyjmowała takieto a takie parametry to wskaźnik na nią musi określać też te parametry.

Jakieś pomysły jak zrobić "uniwersalny" wskaźnik na funkcje ? I czy to ma w ogóle sens ? Czy tworzyć do każdego Buttona klasę - dziecko np SuperMamboSpecialButtonWTF1 xD

Pozdrawiam :)
P-47125
pekfos
» 2012-01-03 16:41:46
uniwersalny wskaźnik? może void* ale by użyć funkcji trzeba jawnie określić argumenty i typ zwracany.
P-47127
SeaMonster131
» 2012-01-03 16:46:34
Coś takiego ?
C/C++
void * Funkcja1()
{
    cout << "1";
}

void * Funkcja2()
{
    cout << "2";
}

class CKlasa
{
public:
    void Metoda( void * funkcja() )
    {
        funkcja();
    }
};

int main()
{
    CKlasa kl;
    kl.Metoda( Funkcja1 );
    cout << "\n";
    kl.Metoda( Funkcja2 );
   
    return 0;
}
P-47131
wizardus
Temat założony przez niniejszego użytkownika
» 2012-01-03 16:46:50
Też myślałem nad void, ale to jawne określanie argumentów. No a przecież chyba nie zrobię nie wiadomo ile X szablonów z różnymi parametrami funkcji... :/
P-47132
wizardus
Temat założony przez niniejszego użytkownika
» 2012-01-03 16:48:40
@SeaMonster

No wszystko super, ale jeśli będzie to funkcja z parametrem to już tak nie podziała. Poza tym klasa powinna sobie gdzieś zapisać adres tej funkcji po to, żeby przycisk po naciśnięciu każdorazowym mógł ją wywołać (choć to już od biedy można robić przekazując w czasie rzeczywistym uchwyt).

---_EDIT_-----

Chyba że, zrobić funkcję bez parametrów, do której będzie został zapisywany wskaźnik, a która będzie wywoływać jakąś funkcję z parametrami. Zawiłe, ale wydaje się logiczne ^^ I później przekazywać np parametr jeśli jest potrzebny z klasy jakiś za pomocą rekurencji wywołując funkcję tak jakby.
P-47135
pekfos
» 2012-01-03 16:52:59
Może tak:
Abstrakcyjna klasa bazowa(dla jednolitych wskaźników) i dziedziczące klasy pochodne(funktory) których używa się inaczej, w zależności od potrzeb ;P
PS: trzeba by zawsze rzutować w dół przed użyciem :P
P-47137
DejaVu
» 2012-01-03 16:54:04
P-47138
wizardus
Temat założony przez niniejszego użytkownika
» 2012-01-03 16:56:15
@DejaVu

To teraz wyobraź sobie 10 obiektów, każdy klasy PButton chce zapisać wskaźnik do funkcji którą mu przekazuje, gdzie dla każdego jest to funkcja zwracająca inne wartości i przekazująca inne argumenty... W linku podanym z kursu nie widzę możliwości zrobienia czegoś takiego :\ Pomimo, że wydaje mi się, że staram się znaleźć.
P-47140
« 1 » 2
  Strona 1 z 2 Następna strona