Quelle est la différence entre typename et class lors de la déclaration des paramètres de template en C++ ?
Bonjour ! Je suis un développeur C++ débutant et j'essaie de comprendre les templates. J'ai remarqué que lors de la déclaration des paramètres de template, on peut utiliser à la fois le mot-clé `typename` et `class`. Par exemple :
```cpp
template
void foo(T t) { }
template
void bar(T t) { }
```
Les deux variantes se compilent et fonctionnent de la même manière. Cela me perturbe. Pourquoi deux mots-clés différents pour le même objectif ? Y a-t-il une quelconque différence entre eux ? J'ai entendu dire que dans certains contextes, par exemple avec les types dépendants imbriqués, `typename` est obligatoire et `class` ne convient pas. Est-ce vrai ? Ou est-ce simplement un vestige historique ? Expliquez-moi en détail, s'il vous plaît, pour que je comprenne enfin quand utiliser quoi. Les exemples de code sont les bienvenus. Merci d'avance !
<<>>
Réponse courte : c'est historique, mais il y a des nuances importantes
En réalité, dans 99% des cas, lors de la déclaration d'un paramètre de template, les mots-clés type
No answers yet.
Connectez-vous pour laisser une réponse