Ce code définit une fonction de modèle, GetArrLength, conçue pour déterminer la taille d'un tableau :
template<typename T, int size> int GetArrLength(T(&)[size]){return size;}
Le paramètre T(&)[size] est déclaré comme référence à un tableau de taille size de type T. Cela signifie qu'il accepte une référence à tout tableau dont le type et la taille sont spécifiés comme paramètres de modèle.
Lors de l'appel de ceci fonction, le compilateur tente de déduire les paramètres du modèle. Par exemple, si nous l'appelons comme suit :
int a[10]; GetArrLength(a);
Le compilateur déterminera que T est un entier et que la taille est 10, créant une référence de paramètre à un tableau de 10 entiers.
La fonction renvoie la valeur de la taille du paramètre du modèle, fournissant effectivement le nombre d'éléments dans le array.
Ce code simplifie l'obtention de la taille du tableau mais présente quelques inconvénients. Premièrement, il utilise un type signé à la fois pour le paramètre de modèle et la valeur de retour, ce qui pose problème car les tailles ne peuvent pas être négatives. Pour une solution plus robuste, un type non signé tel que std::size_t doit être utilisé.
Deuxièmement, le résultat de cette fonction n'est pas une expression constante, même si la taille d'un tableau devrait l'être. L'évaluation d'expression constante est essentielle pour certaines optimisations.
Une approche plus avancée qui fournit un résultat d'expression constante implique l'utilisation de l'introspection de type et de l'opérateur sizeof :
template <std::size_t N> struct type_of_size { typedef char type[N]; }; template <typename T, std::size_t Size> typename type_of_size<Size>::type& sizeof_array_helper(T(&)[Size]); #define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
Cette technique exploite le fait que la taille d'un tableau de caractères est égale à son nombre d'éléments. L'opérateur sizeof récupère la taille du tableau de caractères utilisé pour représenter la taille du paramètre du modèle, fournissant une évaluation par expression constante de la taille du tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!