OVH Cloud OVH Cloud

typename vs class

18 réponses
Avatar
Alain Cabiran
Bonjour,

je poursuis mes pérégrinations (touc :-)) et suis tombé sur boost::array
sur le site de jossutis et ceci :

template <typename T, std::size_t N>
class array {
....

j'ai tellement lu template<class T> que je me suis posé la question
et n'ai pas trouvé de réponse/confirmation.

dans ce cas là, y'a-t-il une différence entre typename
et class ? je penses que non mais si je pouvais en être sûr ...

merci d'avance pour tout indice,

best regards,

Alain C.

10 réponses

1 2
Avatar
Gabriel Dos Reis
Alain Cabiran writes:

[...]

| dans ce cas là, y'a-t-il une différence entre typename
| et class ?

Non.

-- Gaby
Avatar
Franck Branjonneau
Alain Cabiran écrivait:

template <typename T, std::size_t N>

dans ce cas là, y'a-t-il une différence entre typename
et class ? je penses que non mais si je pouvais en être sûr ...


Il n'y a aucune différence dans ce cas là.
--
Franck Branjonneau

Avatar
Michel Michaud
Dans le message 43458be5$0$461$,
template <typename T, std::size_t N>
class array {
[...]

dans ce cas là, y'a-t-il une différence entre typename
et class ? je penses que non mais si je pouvais en être sûr ...


Il n'y a pas de différence pour le compilateur. Note cependant
que certains utilisent « typename » lorsque n'importe quel type
peut être utilisé et « class » lorsqu'il faut un type qui
comporte certaines particularités (en principe une classe dans
ce cas). Mais rien ne vérifie ça au niveau du langage, ce n'est
qu'une convention discutable...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
David Deharbe
Effectivement, en ce cas aucune différence. Certains recommandent
d'utiliser typename pour souligner que les types de bases du langage
peuvent être utilisés, et class dans le cas contraire.

Pour autant que je sache, typename est indispensable lorsqu'il est
nécessaire d'aider le compilateur à identifier que l'identificateur
qui suit est un nom de type; tandis que class est l'unique mot-clef
pour introduire une nouvelle classe, ou patron de classe.

David.
--
Avatar
Fabien LE LEZ
On 8 Oct 2005 10:55:27 -0700, "David Deharbe" :

tandis que class est l'unique mot-clef
pour introduire une nouvelle classe


Non. Tu oublies "struct".

Au fait, est-ce que "template <struct X>" est autorisé ?

Avatar
Franck Branjonneau
Fabien LE LEZ écrivait:

On 8 Oct 2005 10:55:27 -0700, "David Deharbe" :

tandis que class est l'unique mot-clef
pour introduire une nouvelle classe


Non. Tu oublies "struct".


Et union.

Au fait, est-ce que "template <struct X>" est autorisé ?


Non.
--
Franck Branjonneau


Avatar
Fabien LE LEZ
On Sat, 08 Oct 2005 22:26:27 +0200, Franck Branjonneau
:

Au fait, est-ce que "template <struct X>" est autorisé ?


Non.


Une bizarrerie de plus. On n'est plus à une près...


Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On 8 Oct 2005 10:55:27 -0700, "David Deharbe" :
|
| >tandis que class est l'unique mot-clef
| >pour introduire une nouvelle classe
|
| Non. Tu oublies "struct".
|
| Au fait, est-ce que "template <struct X>" est autorisé ?

Non.

-- Gaby
Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On Sat, 08 Oct 2005 22:26:27 +0200, Franck Branjonneau
| :
|
| >> Au fait, est-ce que "template <struct X>" est autorisé ?
| >
| >Non.
|
| Une bizarrerie de plus.

Pourquoi ?

-- Gaby
Avatar
Fabien LE LEZ
On 09 Oct 2005 15:31:52 +0200, Gabriel Dos Reis
:

| >> Au fait, est-ce que "template <struct X>" est autorisé ?

| Une bizarrerie de plus.

Pourquoi ?


Les mots "class" et "struct" ont des rôles tellement proches[*], que
je trouve étonnant que cette "symétrie" soit brisée dans les
déclarations de templates.


[*] En fait, dans mon code, on pourrait remplacer "class" par "struct"
un peu partout sans rien changer au code (car j'explicite
systématiquement "private" et "public").

1 2