2011-09-22 7 views
5

Facciamo un esempio:Esiste un modo per passare gli argomenti del modello a una funzione su un oggetto quando il tipo di oggetto è un argomento del modello?

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; 

} 

Questa è praticamente una pura curiosità sintassi; esiste un modo nella lingua per esprimere ciò senza passare argomenti alla funzione doIt stessa? In caso contrario, non è un grosso problema e sono già ben consapevole dei modi in cui posso lavorare con garbo attorno ad esso, quindi non c'è bisogno di fornire soluzioni alternative. (Accetterò "no" come risposta, in altre parole, se questa è la verità :-P.)

risposta

8

devi dire al compilatore che doIt sarà un modello:

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

E 'incredibile quante volte l'uso di quella parola chiave si insinua su di me. Grazie! – nonoitall

+0

@nonoitall: per maggiori informazioni, vedere questa FAQ: [Qual è la sintassi '-> template',' .template' e ':: template' su?] (Http://www.comeaucomputing.com/techtalk/templates/# templateprefix) – ildjarn

Problemi correlati