Accueil > Forum > > > > Pb de syntaxe avec une methode template d'une classe template.
Pb de syntaxe avec une methode template d'une classe template.
jeudi 4 décembre 2008 à 19:32:41 |
Pb de syntaxe avec une methode template d'une classe template.

gaspos
|
Bonjour, voici une classe template dont l'une des méthode a un type template en plus : template <class type1> struct foo { // première methode sans type template supplementaire // dont l'implementation est donnée plus bas int func1 ( type1 & x ) ;
// deuxième methode avec un type template supplementaire (type2) // dont le code est inline template <class type2> int func2 ( type1 & x , type2 & y ) { return( sizeof( x )+sizeof( y ) ) ; }
// troisième methode avec un type template supplementaire (type2) // dont l'implementation est donnée plus bas template <class type2> int func3 ( type1 & x , type2 & y ) ; } ;
// implementation de la première méthode : OK  template <class type1> int foo<type1>::func1 ( type1 & x ) { return( sizeof( x )*2 ) ; }
// implementation de la troisème méthode :KO ! template <class type1,class type2> int foo<type1>::func3<type2> ( type1 & x , type2 & y ) { return( sizeof( x )*sizeof( y ) ) ; }La partie implémentation de func3 ne compile pas... C'est la première fois que je me retrouve dans cette situation, et je n'ai pas la moindre idée de la syntaxe qui convient pour déclarer ce genre de chose. La méthode func2 qui est déclarée en inline compile sans problème. La méthode func1 qui n'a pas de type inline supplementaire aussi. Si quelqu'un a une idée pour func3, je suis preneur ! Pour info, je compile avec Visual C++ 2005. Peut-être est-ce lui le coupable...  Merci d'avance Gaspos
|
|
vendredi 5 décembre 2008 à 00:59:49 |
Re : Pb de syntaxe avec une methode template d'une classe template.

mezaya
|
La 3eme fonction s'implémente comme ça : template template int foo::func3( type1 & x , type2 & y ) { return( sizeof( x )*sizeof( y ) ) ; }
|
|
vendredi 5 décembre 2008 à 01:02:03 |
Re : Pb de syntaxe avec une methode template d'une classe template.

mezaya
|
désolé pour le formatage
template <class type1>
template <class type2>
int foo<type1>::func3( type1 & x , type2 & y )
{
return( sizeof( x )*sizeof( y ) ) ;
}
|
|
vendredi 5 décembre 2008 à 14:37:50 |
Re : Pb de syntaxe avec une methode template d'une classe template.

gaspos
|
Wow ! Super merci !  En fait j'avais trouvé la réponse dans l'excellent "c++ template, the complete guide" de Vandervoorde et Josuttis aux éditions Addison-Wesley. Mais bien sûr, l'arbre cachait la forêt. Voici le challange de niveau 2, la même chose avec une fonction friend : template <typename Value> class foo { public: template <typename output> friend output & operator<< ( output & o , const foo & t ) //  ça marche ! { o << t.i ; return( o ) ; } private: Value i ; } ; Mais comment déporter la définition de l'operateur << comme on l'a fait pour fonc3  Gaspos
|
|
vendredi 5 décembre 2008 à 21:21:42 |
Re : Pb de syntaxe avec une methode template d'une classe template.

mezaya
|
un peu plus dur cette fois ;)
dans ta class foo tu déclare ta free fonction comme étant friend :
template <class type1> struct foo
{
// définition de ta classe ....
template<class type1, class output>
friend output& operator<< (output& o , foo<type1>& f);
}
puis du implémente ta fonction comme ceci :
template<class type1, class output>
output& operator<< (output& o, foo<type1>& f)
{
o << f.i;
return o;
}
et Voila...
|
|
lundi 8 décembre 2008 à 18:05:57 |
Re : Pb de syntaxe avec une methode template d'une classe template.

gaspos
|
Merci de ta prompte réponse ! J'avais déjà pensé à cette syntaxe mais ça ne marche pas :
Avec ce code :
template <typename Value> class foo { public: template <typename output> friend output & operator<< ( output & o , const foo & t ) ; private: Value i ; } ; template <typename Value,typename output> output & operator<< ( output & o , const foo<Value> & t ) { o << t.i ; // ERREUR : ne peut accéder à un membre privé return( o ) ; } le compilo me renvoie l'erreur en rouge au dessus. Tout s'explique avec cette tentative :
template <typename Value> class foo { public: template <typename output> friend output & operator<< ( output & o , const foo & t ) { // implémentée ici o << t.i ; return( o ) ; } private: Value i ; } ; template <typename Value,typename output> output & operator<< ( output & o , const foo<Value> & t ) { // et encore une fois ici --> on devrait avoir une erreur ! o << t.i ; return( o ) ; } J'ai toujours la même erreur alors que je m'attendais à ce que le compilo me dise que l'opérateur << était déjà implementé. J'en conclue qu'il ne fait pas le lien entre la déclaration de la fonction amie au sein de la classe et celle implémentée plus bas. Ce qui explique l'erreur : il ne sait pas que cette fonction est celle qui avait désignée comme amie et du coup, interdit l'accès aux membres privés.
Ce qui est encore plus bizarre, c'est que si, dans la première version du code, on vire le "private", ça marche et l'operateur << est bien invoqué. Ce qui signifie que dans ce cas là, le compilo sait bien aller chercher cette fonction.
Il faudrait essayer avec gcc pour voir si c'est un pb d'implementation de la norme c++ par Crimosoft...
Hadrien
|
|
mercredi 10 décembre 2008 à 00:19:25 |
Re : Pb de syntaxe avec une methode template d'une classe template.

mezaya
|
Réponse acceptée !
il y a une erreur dans ton code il faut définir les 2 classes du templates. ça marche j'ai essayé sur Visual 2008.
à la définition de la classe c'est pas :
template <typename output>
friend output & operator<< ( output & o , const foo & t ) ;
mais :
template <typename Value, typename output> // il faut redéfinir template Value
friend output & operator<< ( output & o , const foo & t ) ;
|
|
lundi 15 décembre 2008 à 19:03:26 |
Re : Pb de syntaxe avec une methode template d'une classe template.

gaspos
|
Mais bon sang, mais c'est bien sûr ! L'opérateur << n'est pas une méthode de la classe, donc il n'hérite pas de son paramètre de template. Du coup, ça marche dans mon code aussi ! Je m'en vais publier ce code sous peu (qui est enfin présentable grâce à toi).  Le fait est que c'est un peu étrange cette déclaration de fonction amie depuis l'interieur de la déclaration d'une classe. encore merci ! Hadrien
|
|
Cette discussion est classée dans : int, methode, type, template, méthode
Répondre à ce message
Sujets en rapport avec ce message
template [ par dam1234 ]
G un probleme avec une methode de classe declaree en template. J'aurai besoin de savoir comment est ce que l'on fait pour connaitre quel a été le type
type de variable? long int ? [ par dleewax ]
salut! je suis nouveau dans le C++ et j'ai un petit problème... je suis en train de faire un petit programme permettant de calculer les factorielles..
Conversion de CString vers Int [ par DARKSIDIOUS ]
Bonjour à tous,J'ai un problème qui me turlupine depuis quelques heures : comment fait-on pour convertir des données d'une variables de type CString v
convertir des chaine en type int [ par super ienien ]
comment convertit on des chaine de type char en type entier ou inversementmeci d'avance
Une fonction multi-type ? [ par TeLeTUbIz ]
Ouah !!!J'ai cherché, scruté dans tout les coins, soulevé les montagnes,... mais je ne trouve pas solution à mon problème.En fait, je voudrais faire u
comment tester un type de donné en C++ [ par Armandopoulos ]
Salut !!en VC++Je voudrai bien savoir comment tester un type de donné (par ex. int , float , long , char) entré par l utilisateur au clavier.J ai pens
Variable int sur le disque... [ par nullspace ]
Je cherche à enregistrer et lire sur le disque par ofstream et ifstream à partir de variables de type int.Seulement il m'écrit sous format texte.En vb
aidez moi svp [ par asnow ]
Q'un aurait-il la gentillesse de me traduire ce code, en algorithme. merci d'avance.int i=0;int x=random(10);int y=random(10);int type_pos=random(2);i
Renvoie de type int& [ par saturne_1606 ]
Bonjour a tous!Voila g la fonction suivante:int& tableau::operator ()(int l, int c){ if ((l>=tab.size())||(c>=(tab[l]).size())) {
fonction apply / template [ par pointejb ]
Bonjour à tous,Je cherche un moyen d'implémenter une fonction de type 'apply' qui prendrait en parametres une fonction et ses arguments et qui aurait
Livres en rapport
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|