CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] specialisation template partielle

godrik
godrik
Niveau 30
29 avril 2008 à 15:10:59

Bonjour,
Je me pose aujourd'hui un probleme de specialisation template qui n'a pas l'air d'etre possible...

a t'on le droit selon la norme de faire de la specialisation partielle de fonction template ?
si oui, pourquoi le code http://godrik.mandragor.org/~godrik/test.cpp ne compile pas avec gcc ?
compile t'il avec un autre compilo ? (je n'ai que GCC sous la main)

Merci

godrik
godrik
Niveau 30
29 avril 2008 à 15:12:01

j'ai oublié le seul message d'erreur fourni par g++

test.cpp:7: erreur: function template partial specialization «fnct<1, A>" is not allowed

caeIacanthe
caeIacanthe
Niveau 10
29 avril 2008 à 16:52:21

marche pas avec devcpp non plus :gni:

elhuron
elhuron
Niveau 6
29 avril 2008 à 16:58:51

Erreur de compilation sous Code::Blocks aussi :
Line 7 : error, partial

elhuron
elhuron
Niveau 6
29 avril 2008 à 17:02:01

Dsl pour le double post...
(Line 7) error : partial specialization `fnct<1, A>` of function template.

sangohan55
sangohan55
Niveau 10
29 avril 2008 à 17:26:15

heu... vous avez tout deux compilé avec gcc or il a dit que ça marchai pas avec...

Avec VC++

main.cpp(7) : error C2768: 'fnct' : utilisation non conforme d'arguments template explicites

elhuron
elhuron
Niveau 6
29 avril 2008 à 17:38:53

Mouarf, en effet :)
Mais bon, on sait jamais, l'IDE peut avoir une certaine part d'importance.

dnob700
dnob700
Niveau 10
29 avril 2008 à 21:24:57

avec icc :
test.cpp(7): error: an explicit template argument list is not allowed on this declaration
void fnct<1, A>(){std::cout<<"1"<<std::endl;}

Par contre, c'est possible mais il faut spécialiser une classe entière et non pas juste une fonction :

http://repository.sectionpc.info/C/godrik.cpp

Je ne sais pas si c'est juste un problème de syntaxe ou s'il y a une meilleur raison pour le fait que ça ne fonctionne pas avec une fonctio. Il faudra regarder dans le Stroustrup.

kufa
kufa
Niveau 9
30 avril 2008 à 10:33:09

La raison est simple: les partials specializations n'existent pas pour une template function; par contre ces fonctions peuvent etre overloadees (style T& a la place de T, etc, bien utile pour les typetraits).
Certains compilos peuvent laisser passer ca, mais quand on est pas sur, le mieux est de tester sur commeau =)
Oui il faut passer par une classe pour avoir l effet desire dans ce cas.

godrik
godrik
Niveau 30
30 avril 2008 à 10:37:37

ok.
Une derniere question. Pourquoi la norme dit elle ca ? ca a l'air stupide comme comportement. Quel est la raison derriere ?

kufa
kufa
Niveau 9
30 avril 2008 à 17:24:46

Je pense que c'est principalement a cause de l'overloading: en plus du conflit qu'il pourrait y avoir entre une version overloaded et partially specialized, si on avait des partial specializations pour les template functions, le partial ordering serait quasi impossible a faire.

godrik
godrik
Niveau 30
01 mai 2008 à 16:26:00

le meme probleme se pose pour les classes non ?
pourtant tu peux les specialiser partiellement.
Je ne comprends pas vraiment la raison profonde...

kufa
kufa
Niveau 9
02 mai 2008 à 09:23:49

Non, tu ne peux pas overloader une classe.

kufa
kufa
Niveau 9
02 mai 2008 à 09:24:33

edit: j essayerai de formuler un exemple des que j aurai le temps

godrik
godrik
Niveau 30
02 mai 2008 à 13:14:39

c'est ce que fait dnob dans son exemple non ?
la classe template est specialisé partiellement.

WhiteNerdy
WhiteNerdy
Niveau 6
02 mai 2008 à 14:46:16

La surcharge c'est le fait de définir deux fonctions/opérateurs du même nom avec une signature du même nom, et ça ne s'applique pas aux classes; contrairement à la spécialisation.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment