Avatar ·

Quelle est la différence entre typedef et using en C++ ? Quand utiliser quoi ?

Bonjour, collègues ! J'ai récemment commencé à étudier le C++ et je suis tombé sur deux façons de créer des alias de types : le bon vieux `typedef` et le nouveau `using` (ou alias declaration), apparu en C++11. Je comprends qu'ils font tous les deux la même chose en apparence. Par exemple, je peux écrire : ```cpp typedef unsigned long long ULL; using ULL = unsigned long long; ``` Et apparemment il n'y a aucune différence. Mais j'ai entendu dire que `using` est plus cool et qu'il est recommandé dans le code moderne. Pourquoi ? Quelle est la véritable différence ? Y a-t-il des cas où `typedef` ne fonctionne pas, mais `using` fonctionne ? Ou l'inverse ? Je suis particulièrement intéressé par les cas complexes : travail avec les pointeurs de fonctions, les templates, les types imbriqués. J'ai essayé de créer un alias pour une classe template avec `typedef` et je n'ai pas réussi. Peut-être que je fais quelque chose de mal. Voici un exemple qui me trouble : ```cpp // Cela fonctionne ? template typedef std::vector Vec; // Erreur de compilation ! // Et cela ? template using Vec = std::vector