Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]function object functional

    ciao.
    Vorrei creare un std::function che punta a una funzione generica , diciamo Func().
    Ho varie classi che contengono come funzione membro la funzione Func e vorrei poter fare il bind dei puntatori a queste classi alla funzione , sempre Func().
    cosi:

    codice:
    class A{
    
    int Func(){
       return 0;
    }
    };
    
    class B{
    
    int Func(){
       return 1;
    }
    };
    class C{
    
    int Func(){
       return 2;
    }
    };
    vorrei a questo punto dichiarare la funzione a cui punto (Func) e poi fare il bind su un puntatore di classe A,B o C in modo da invocare la funzione sulle varie classi.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    A a;
    B b;
    C c;
    
    std::function<int()> fa = std::bind(&A::Func,&a);
    std::function<int()> fb = std::bind(&B::Func,&b);
    std::function<int()> fc = std::bind(&C::Func,&c);
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie Shodan , ma intendevo qualcosa del genere:
    codice:
    class X {
    public:
    	X(int n): m_Int(n){}
    	int foo()
    	{
    		return m_Int;
    	}
    private:
    	int m_Int;
    };
    .
    .
    .
    
    std::function<int (X*)> f;
    
    f = &X::foo;      
    	
    X x(1);
    X x1(2);
    	
    int v = f(&x); //1
    v = f(&x1);   //2
    in questo modo creo un pointer to member e poi basta cambiare l'istanza della classe che si "aggancia" in automatico.

    mi chiedevo solo se "si fa cosi" o ci possono esssere dei problemi.

    grazie

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Usa std::mem_fn.
    http://en.cppreference.com/w/cpp/uti...ctional/mem_fn

    codice:
    class X {
    public:
    	X(int n): m_Int(n){}
    	int foo()
    	{
    		return m_Int;
    	}
    private:
    	int m_Int;
    };
    ...
    
    std::function<int (X*)> f;
    f = mem_fn(&X::foo);;      
    	
    X x(1);
    X x1(2);
    	
    int v = f(&x); //1
    v = f(&x1);   //2
    Se però non hai necessità di memorizzare f da qualche parte è più semplice usare auto.
    codice:
    auto f = mem_fn(&X::foo);
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie Shodan.
    ciao.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.