4 votes

Template-parameter vs type-parameter vs non-type parameter

Dans le Standard C++ dans le chapitre 14 (Modèles), il est fait référence aux paramètres de modèle avec plusieurs noms différents, selon leur contexte.

paramètre non-type

 template
 class foo {};

paramètre de modèle

template
class bar {};

paramètre de type

 ?????

Dans cette citation ci-dessous, cela semble indiquer qu'il s'agit de trois choses distinctes, cependant je n'arrive pas à comprendre ce qu'est un paramètre de type ?

14.1 Paramètres de modèle [temp.param]

9 ... Un argument de modèle par défaut peut être spécifié pour tout type de paramètre de modèle (type, non-type, modèle) qui n'est pas un package de paramètres de modèle (14.5.3). ...

Vous pouvez voir ici qu'il utilise trois noms distincts pour les paramètres de modèle. Si paramètre de modèle était une généralisation des deux autres, pourquoi l'inclure dans la liste ci-dessus.

Dans la section 14.1.2, il les désigne ensuite simplement par type et non-type, et le paramètre de modèle comme une généralisation.

Alors, qu'est-ce que c'est? Quelqu'un peut-il expliquer?

7voto

Joseph Mansfield Points 59346

Il est dit qu'il existe trois types de template-parameter :

  1. Type de paramètre de template

    template
    class bar {};
  2. Paramètre de template de type non

    template
    class foo {};
  3. Paramètre de modèle de modèle

    template class T>
    class baz {};

Cependant, je suis d'accord que cela est mal défini. Dans la grammaire, un template-parameter qui commence par template est l'une des productions possibles de type-parameter.

5voto

Andy Prowl Points 62121

Dans le contexte dans lequel vous utilisez ce libellé, les "paramètres de modèle" sont des paramètres qui sont des modèles de classe. Par exemple:

template class T, typename U, int N>
struct { ... };

Ici, T est un paramètre de modèle, U est un paramètre de type, et N est un paramètre non de type.

Dans la section 14.1.2, il fait alors référence à eux simplement comme des types et non-types, et le paramètre de modèle comme une généralisation.

Il est important de dissocier l'utilisation du mot "modèle". Dans de nombreux contextes, il est simplement utilisé pour indiquer que ce sont des paramètres "d'un modèle" (par opposition aux paramètres d'une fonction, par exemple). Dans ce cas, ces catégories deviennent (respectivement) "paramètres de modèle de modèle", "paramètres de type de modèle", et "paramètres non de type de modèle".

Aussi, dans certaines situations, la première catégorie est également considérée comme définissant un "paramètre non de type", car les arguments qui peuvent être fournis pour elle ne sont pas des types (ce sont des modèles). Par conséquent, parfois vous pouvez trouver l'expression "paramètres non de type, non de modèle" pour se référer strictement à la troisième catégorie (c'est-à-dire la catégorie de N ci-dessus).

Voir également la note de bas de page 136 à l'Article 14.1/2 du standard C++11:

Étant donné que les paramètres de modèle de modèle et les arguments de modèle de modèle sont traités comme des types à des fins descriptives, les termes paramètre non de type et argument non de type sont utilisés pour faire référence aux paramètres et aux arguments non de type, non de modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X