2010-05-05 5 views

Répondre

7

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.)

+1

'' 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 :) –

4

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.)