2011-09-26 15 views
16

Come si imposta il nome del metodo (qui some_method) come parametro del modello?Nome metodo C++ come parametro modello

template<typename T> 
void sv_set_helper(T& d, bpn::array const& v) { 
    to_sv(v, d.some_method()); 
} 

risposta

18

Non esiste un "parametro identificativo modello", quindi non è possibile passare nomi come parametri. Si potrebbe però prendere un puntatore a funzione membro come argomento:

template<typename T, void (T::*SomeMethod)()> 
void sv_set_helper(T& d, bpn::array const& v) { 
    to_sv(v, (d.*SomeMethod)()); 
} 

che sta assumendo la funzione ha un tipo void ritorno. E si chiama in questo modo:

sv_set_helper< SomeT, &SomeT::some_method >(someT, v); 
+0

Grazie! Mettere T :: * SomeMethod tra parentesi rende questa soluzione funzionante. –

18

Ecco un semplice esempio ...

#include <iostream> 

template<typename T, typename FType> 
void bar(T& d, FType f) { 
    (d.*f)(); // call member function 
} 


struct foible 
{ 
    void say() 
    { 
    std::cout << "foible::say" << std::endl; 
    } 
}; 

int main(void) 
{ 
    foible f; 
    bar(f, &foible::say); // types will be deduced automagically... 
} 
+0

+1 Grazie, hai avuto la parte '. * F' prima di K-ballo, ma la sua risposta è stata la prima. –

Problemi correlati