2010-11-06 12 views
0
template <class T> 
void foo(T arg) { 
    T var = arg; 
} 

Est-ce possible? J'ai une situation similaire et je ne peux pas obtenir quelque chose comme ça pour travailler.Déclarer des variables avec le type défini par le modèle

Merci.

+1

Si vous essayez d'instancier un T ça va marcher. Mais si vous essayez d'instancier un T :: iterator, ou un T :: your_random_typedef, ce ne sera pas le cas. Vous devez utiliser 'typename T :: your_random_typedef my_variable;' si vous voulez en déclarer un. – BatchyX

Répondre

4

Eh oui, les travaux ci-dessus bien, comme cet exemple compilable minimum montre:

template <class T> 
void foo(T arg) 
{ 
    T var = arg; 
} 

int main() 
{ 
    foo(23); 
    return 0; 
} 

Le problème doit être dans un autre code que vous avez pas encore posté :)

+0

Merci, j'ai pensé que le problème serait ailleurs. –

4

Oui, il est possible et fonctionnera si T est copiable. Il peut ne pas fonctionner si T est une classe qui a un constructeur de copie privée:

class Noncopyable { 
private: 
    Noncopyable(const Noncopyable&); 

public: 
    Noncopyable() {} 
}; 

template <class T> 
void foo(T arg) { 
    T var = arg; 
} 

int main() 
{ 
    foo(Noncopyable()); 
} 
Questions connexes