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.
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.
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é :)
Merci, j'ai pensé que le problème serait ailleurs. –
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());
}
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