Maison > développement back-end > C++ > le corps du texte

Comment puis-je obtenir la taille d'un tableau à l'aide d'une fonction de modèle C ?

Patricia Arquette
Libérer: 2024-11-21 14:40:11
original
139 Les gens l'ont consulté

How Can I Get the Size of an Array Using a C   Template Function?

Comment fonctionne cette fonction de modèle « taille du tableau » ?

Cette fonction de modèle, GetArrLength, est conçue pour déterminer la longueur d'un tableau. Pour ce faire, elle exploite la connaissance de la taille et du type du tableau, qui sont définis respectivement comme paramètres de modèle de type T et de taille int.

La fonction prend une référence à un tableau de type T et de taille comme un paramètre d’entrée. Cette référence est déclarée à l'aide de la syntaxe T(&)[size], ce qui signifie que le paramètre doit être une référence à un tableau de type T avec une taille de taille constante.

Lorsqu'il est appelé, le compilateur tente pour déduire les paramètres du modèle en fonction du type et de la taille du tableau transmis. Par exemple, si nous appelons GetArrLength avec un tableau d'entiers nommé a avec une taille de 10, le compilateur en déduira que T est un entier et la taille est 10, et la fonction renverra la valeur 10.

Cependant, il existe certaines limitations à l'implémentation de la fonction GetArrLength. Premièrement, l'utilisation d'un entier signé pour le paramètre de modèle et le type de retour peut entraîner des problèmes de tailles de tableau négatives. Pour des raisons pratiques, il est conseillé d'utiliser un type non signé, tel que std::size_t, à la fois pour le paramètre de modèle et le type de retour afin d'éviter tout comportement inattendu.

De plus, le résultat de la fonction n'est pas une expression constante. , bien que la taille d'un tableau soit intrinsèquement constante. Pour remédier à cette limitation, il existe des solutions plus robustes qui peuvent fournir un résultat constant, comme le bloc de code suivant :

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))
Copier après la connexion

Cette technique génère un résultat constant en codant la taille du tableau dans la taille d'un type en utilisant une approche de métaprogrammation de modèles. Il garantit que le résultat n'est pas évalué dynamiquement et reste une expression constante.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal