2011-09-22 9 views
5

Para ilustrar:¿Hay alguna manera de pasar argumentos de plantilla a una función en un objeto cuando el tipo de objeto es un argumento de plantilla?

struct MyFunc { 

    template <size_t N> 
    void doIt() { 
     cout << N << endl; 
    } 

}; 

template <typename Func> 
struct Pass123ToTemplateFunc { 

    static void pass(Func f) { 
     f.doIt<123>(); // <-- Error on compile; is there a way to express this? 
    } 

}; 

int main() { 

    Pass123ToTemplateFunc<MyFunc>::pass(MyFunc()); 

    return 0; 

} 

Esto es casi puramente una curiosidad sintaxis; ¿Hay alguna forma en el lenguaje para expresar esto sin pasar argumentos a la función doIt? Si no, no es gran cosa y ya estoy al tanto de las formas en que puedo solucionarlo con agrado, por lo que no es necesario proporcionar soluciones alternativas. (Voy a aceptar un "no" como respuesta, en otras palabras, si esa es la verdad: -P.)

Respuesta

8

usted tiene que decirle al compilador que doIt habrá una plantilla:

f.template doIt<123>(); 
+1

Es increíble cuántas veces el uso de esa palabra clave se me escapa. ¡Gracias! – nonoitall

+0

@nonoitall: para obtener más información, consulte estas preguntas frecuentes: [¿Qué es la sintaxis '-> plantilla',' .template' y ':: template' sobre?] (Http://www.comeaucomputing.com/techtalk/templates/# templateprefix) – ildjarn

Cuestiones relacionadas