Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Kreator
    Registrato dal
    May 2002
    Messaggi
    278

    [c++] Puntatori a funzioni

    Ciao raga.

    Volevo sapere che vantaggi ci sono nel crearsi dei puntatori a funzioni per poi poter richiamare funzioni con il puntatore stesso ?
    Non e' uguale a richiamare la funzione semplicemente ?


  2. #2
    certo e' identico,
    solo che puoi modificare a runtime la funzione da richiamare in base
    a eventi prestabiliti
    comunque e' una pratica non semplice e rare volte utilizzata..
    a meno che non devi scrivere un compilatore o qualche applicazione particolare..

  3. #3
    Utente di HTML.it L'avatar di Kreator
    Registrato dal
    May 2002
    Messaggi
    278
    scusami ...
    in che senso modificare a runtime la funzione da richiamare ?
    modificare la funzione da richiamare potresti farlo anche con una chiamata normalissima con un IF ...
    if (cond)
    {
    Funzione1();
    }
    else
    {
    Funzione2();
    }

  4. #4
    si, vero anche questo ma se scrivi una funzione generica
    passando un vettore di puntatore a funzioni
    la funzione fara' quello che ti aspetti indipentemente dal
    vettore passato..
    cioe' una funzione che se gli si passa n avvia l'nesimo elemento di un vettore..
    poi si possono sfruttare in altre situazioni..

  5. #5
    Utente di HTML.it L'avatar di Kreator
    Registrato dal
    May 2002
    Messaggi
    278
    sostanzialmente se ho capito bene il discorso, con un array di puntatori a funzioni potrei inserire e rimuovere dinamicamente delle chiamate alle funzioni.
    Giusto ?

  6. #6
    Originariamente inviato da Kreator
    sostanzialmente se ho capito bene il discorso, con un array di puntatori a funzioni potrei inserire e rimuovere dinamicamente delle chiamate alle funzioni.
    Giusto ?
    zi

  7. #7
    Utente di HTML.it L'avatar di Kreator
    Registrato dal
    May 2002
    Messaggi
    278
    grazie mille.
    Ciaooo.

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    I puntatori a funzione sono molti utili anche in altri casi, ad esempio per scrivere codice generico, con un certo livello di astrazione.

    ad esempio puoi creare un algoritmo per l'ordinamento che prende come parametro l'array da ordinare come void** e un puntatore ad una funzione di confronto

    int (*confronta)(void *, void *)

    che restituisce -1, 0, 1 a seconda che il primo argomento sia maggiore, uguale o minore del secondo.

    Una volta che un algoritmo di ordinamento è in grado di confrontare due elementi dell'array (attraverso la funzione confronta), è anche in grado di ordinare qualsiasi tipo di array, perche astrae dal tipo effettivo degli elementi, di cui si tiene conto solo nella funzione 'confronta' passata come argomento.

    Quindi se ti crei un array di interi puoi chiamare la funzioene di ordinamento passando come funzione di confronto ad esempio la seguente:

    codice:
    int confronta(void *a, void *b){
        int aa = (int)*a;
        int bb = (int)*b;
        if(aa < bb)
            return -1;
        if(aa > bb)
            return 1;
        return 0;
    }

    ma la stessa funzione di ordinamento la puoi usare per ordinare un array di struct che hanno due campi interi 'primo' e 'secondo' e che vanno confrontati in base alla somma di tali campi:

    codice:
    typedef struct coppia{
        int primo;
        int secodo;
    }coppia
    
    int confronta(void *a, void *b){
        coppia *aa = (coppia*)a;
        coppia *bb = (coppia*)b;
        if(aa->primo + aa->secondo < bb->primo + bb->secondo)
            return -1;
        if(aa->primo + aa->secondo > bb->primo + bb->secondo)
            return 1;
        return 0;
    }

    La libreria standard del c mette proprio a disposizione una funzione di ordinamento qsort che prende come parametro uan funzione di confronto e che qundi è in grado di ordinare array di qualsiasi tipo. Questa tecnica puo essere ampiamente utilizzata per implementare molti degli algoritmi piu diffusi, in cui spesso si puo astrarre rispetto al tipo specifico.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.