Specialisation de template - C++ - Programmation
Marsh Posté le 01-05-2006 à 10:39:05
y a pas de spécialisation dans les 2 cas : les paramètres ne sont pas du même type : tantôt entier, tantôt un type.
Marsh Posté le 01-05-2006 à 10:43:38
hum, je dirais même plus. Je ne pense que ce programme soit légal et ça explique la différence de comportement. Dans ta première classe, le paramètre de la spécialisation dépend lui-même d'un paramètre template. Enfin j'ai jamais vu ça du moins.
Marsh Posté le 01-05-2006 à 10:50:57
Desole mais je comprends pas tres bien la.
Ce qui m'interesse c'est la specialisation de test<> dans le cas ou le parametre passe est de type elem.
Dans le cas 1, le tout est contenu dans le template Container<T>.
Le cas 2 est un cas particulier du cas 1 si T = unsigned int.
Le code est le meme dans les 2 cas.
je suis d'accord que les 2 types Container<unsigned int>::elem<0> et ContainerUInt::elem<0> sont different mais je passe toujours un type a test<>.
Marsh Posté le 01-05-2006 à 10:54:28
le code est différent. les template c'est pas des macros. je maintiens ma théorie.
Marsh Posté le 01-05-2006 à 23:53:12
FrozenPaladin a écrit : Je me trouve face a un probleme lors de la specialisation d'un template lorsque celui ci est contenu dans un autre template. [...] Dans le template Container<T> la specialization de test<test_elem> est ignoree est la valeure de ContResult est alors 0. |
C'est une violation de 14.7.3.18. Tu ne peux pas spécialiser une classe template si elle est imbriquée dans une classe template non spécialisé explicitement.
FrozenPaladin a écrit : Par contre si je specialise "a la main" ContainerT en ContainerUInt la valeur est bien 5. |
La, c'est bon.
FrozenPaladin a écrit : Quelqu'un aurait-il une explication ? |
Le code est normallement "ill-formed". AMHA si ça compile, ce n'est pas normal ...
Marsh Posté le 01-05-2006 à 10:21:26
Bonjour a tous !
Je me trouve face a un probleme lors de la specialisation d'un template lorsque celui ci est contenu dans un autre template.
La sortie est :
Dans le template Container<T> la specialization de test<test_elem> est ignoree est la valeure de ContResult est alors 0.
Par contre si je specialise "a la main" ContainerT en ContainerUInt la valeur est bien 5.
Quelqu'un aurait-il une explication ?
Le resultat est obtenu avec VC++ 8.