2011-09-26 10 views

Respuesta

18

No existe un 'parámetro identificador de plantilla', por lo que no puede pasar nombres como parámetros. sin embargo, puede tener un puntero a función miembro como argumento:

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

que está asumiendo la función tiene un tipo de retorno void. Y se le llama así:

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

Gracias! Al poner T :: * SomeMethod entre paréntesis, esta solución funciona. –

18

Aquí está un ejemplo sencillo ...

#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 Gracias, tenías la parte '. * F' justo antes de K-ballo, pero su respuesta fue primero. –

Cuestiones relacionadas