Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    97

    Passare un puntatore a funzione come argomento di una funzione

    Ciao ragazzi,
    premetto che il mio quesito e` abbastanza intricato da esprimere, conto sulla vostra ottima capacita` di comprensione....


    Stavo studiando un po` di C++ e mi stavo chiedevo come ( e se) e` possibile creare una funzione che riceva come argomento un puntatore a funzione "membro" di una classe. (':master:')
    Io ho fatto un piccolo esempio in C dove la funzione PassPointer() riceve come argomento un puntatore a funzione globale.

    Ovviamente il programma NON ha nessuna utilita` se non lo scopo didattico....


    codice:
    #include <iostream>
    using namespace std;
    
    // funzione globale 
    float Add (float a, float b)   { return a+b; }
    
    //Classe C++
    class MyClass
    {
    public:
    	float DoAdd(float a, float b)   { return a+b; };
    };
    
    
    
    /*ecco la funzione che riceve come argomeno il puntatore a funzione... */
    void PassPointer( float (*ptrFunct)(float, float) )
    {
    	float result = ptrFunct(12,21);
    	cout << result << endl;
    };
    
    
    
    void PassFunctionPointer(void)
    {
    	PassPointer(&Add);  
    }
    
    
    
    void main()
    {
    	PassFunctionPointer();
    }

    Con la funzione globale, non ci sono problemi, ma volendo passare la funzione membro MyClasss:: DoAdd() come devo trasformare la mia funzione PassPointer() ? ('')

    A voi l`ardua sentenza.
    Ciao ed a presto...
    Sergio

  2. #2
    Sinceramente non so come fare ad ottenere un puntatore ad un membro di una classe. Credo che il problema stia nel mangling e nel puntatore this nascosto.
    Quando ho bisogno di un puntatore ad un membro di una classe normalmente faccio il membro statico ed in qualche modo passo l'istanza come argomento.
    Ho provato anche con:
    codice:
      typedef bool (myClass::*DoAddCB)(float a, float b);
    ma anche se non da errore non saprei in che modo chiamare il metodo. In effetti non dovrei avere solo il puntatore alla funzione, ma anche l'istanza sulla quale devo agire (è quello che normalmente faccio esplicitamente con il membro static).

    Sicuramente è un bel dilemma

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.