J'ai vu que @GMan a implémenté a version of sizeof...
pour les gabarits variadiques qui (autant que je sache) est équivalent au sizeof...
intégré. Cela ne va-t-il pas à l'encontre du deuxième principe de conception: prefer libraries to language extensions?Pourquoi y a-t-il un opérateur sizeof ... en C++ 0x?
Répondre
De Variadic Templates (Revision 3) (N2080=06-0150), page 6:
Bien que pas strictement nécessaire (nous pouvons mettre en œuvre
count
sans cette fonctionnalité), vérifier la longueur d'un paquet de paramètres est une opération commune qui mérite une syntaxe simple. De plus, cette opération peut devenir nécessaire pour des raisons de vérification de type lorsque des modèles variés sont combinés avec des concepts; voir la section 3.3.
(article 3.3 parle de concepts qui est hors de propos aujourd'hui.)
sizeof...
est juste du sucre, je pense.
sizeof
est en effet de base à la langue est ...
, et même si une fonction countof
pourrait exister nous avons déjà sizeof
et ...
réservé donc nous pourrions aussi bien le rendre pratique pour obtenir le nombre de cette façon. Par contre, si sizeof
et ...
n'étaient pas réservés, l'idée d'ajouter une telle chose aurait probablement échoué car les nouveaux mots-clés ont tendance à être désapprouvés. (Moins mieux.)
- 1. opérateur sizeof dans c
- 2. C++ 0x: opérateur conditionnel, xvalues et decltype
- 3. C++ sizeof (...)
- 4. Nouveaux caractères Unicode en C++ 0x
- 5. C# sizeof decimal?
- 6. opérateur surcharge en C++
- 7. sizeof structure vide est 0 en C et 1 en C++ pourquoi?
- 8. Surcoupe = opérateur en C++
- 9. règles Surcharger pour définies par l'utilisateur littéraux en C++ 0x
- 10. sizeof un membre struct
- 11. Comment utiliser 'auto' en C++ (C++ 0x)?
- 12. pourquoi préférons-nous? à ?? opérateur dans C#?
- 13. opérateur << en C#
- 14. C# en surcharge opérateur
- 15. question sur opérateur% en C++
- 16. opérateur OR en C#
- 17. opérateur Surcharger en C
- 18. opérateur d'affectation en C++
- 19. Taille du tampon: N * sizeof (type) ou sizeof (var)? C++
- 20. problème avec std :: make_tuple en C++ 0x
- 21. Fermeture et lambdas imbriqués en C++ 0x
- 22. Transférer tous les constructeurs en C++ 0x
- 23. Opérateur C++ + et opérateur + = surcharge
- 24. Opérateur de coalescence en C#?
- 25. Surcharger Supprimer opérateur en C++
- 26. N'est pas opérateur en C#
- 27. Y at-il un problème avec l'utilisation de sizeof (type [1234])?
- 28. idiomes de C# communs, y compris coalesce ?? opérateur
- 29. sizeof (void) est égal à 1 en C?
- 30. C++ 0x constructeur move Gotcha
'' sizeof ... peut également être appliqué aussi bien aux paquets paramètres du modèle et de la fonction. Donc 'sizeof ... (T)' et 'sizeof ... (t)' fonctionnent aussi bien. Une solution basée sur une bibliothèque fonctionnerait soit avec des packs de paramètres de modèles ou de fonctions, mais pas avec les deux, je crois. Parce qu'une expansion produit une séquence de types, et l'autre expansion produit une séquence d'expressions. Peut-être l'écrire comme 'template struct count;' et ensuite passer le paquet comme 'count ' pourrait fonctionner. Puisque 'sizeof' peut gérer les deux types et les expressions qui semblent fonctionner, mais c'est clairement plus laid :) –