2010-07-16 3 views
3

Que signifie prendre un nombre variable d'arguments par référence? Cela signifie-t-il que chacun des arguments est passé par référence?C++ 0x passer des arguments à des fonctions de modèle variées

Considérons par exemple les fonctions suivantes, qui effectue un traitement sur chacun de ses arguments:

void f() // base case for recursion 
{ 
} 


template <typename Head, typename ... Tail> 
void f(Head& head, Tail&... tail) 
{ 
    // Do processing on head 
    process(head); 

    // Now recurse on rest of arguments 
    f(tail...); 
} 

Maintenant, si je:

int a, b, c; 
... 
f(a, b, c); 

Est-ce que ce résultat instanciations de f (int &, int &, int &), f (int &, int &), et finalement f (int &)?

Que diriez-vous si je change le deuxième paramètre de f() pour être "Tail ..." au lieu de "Tail & ...". Est-ce que les instanciations seront maintenant f (int &, int, int), f (int &, int), et finalement f (int &), ce qui signifie que par ex. 'c' sera copié par les deux premiers appels et le dernier appel modifiera une copie au lieu de l'original?

Quelqu'un pourrait-il pointer vers une bonne référence qui explique comment exactement les modèles variés fonctionnent?

Répondre

2

Je pense que votre intuition est correcte, vous pouvez lire tous les détails de la draft ISO spec actuelle (il est pas encore finalisé) et vous pouvez les tester avec GCC> 4.3

Questions connexes