Hello,
Est-il possible de faire un typedef templatis� pouer quelque quelque chose comme �a ?
Merci.Code:T* (*)(const char *)
Version imprimable
Hello,
Est-il possible de faire un typedef templatis� pouer quelque quelque chose comme �a ?
Merci.Code:T* (*)(const char *)
Puis ensuite:Code:
1
2
3
4 template<class T> struct MaMethodeTrait { typedef T* (*MonTypeDeMethode)(const char *); };
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 int* UneFonction(const char*) { return NULL; } char* UneAutreFonction(const char*p) { return NULL; } typedef unsigned char T[5]; int main() { MaMethodeTrait<int>::MonTypeDeMethode L_pfnMaMethode; L_pfnMaMethode = UneFonction; L_pfnMaMethode("t"); MaMethodeTrait<char>::MonTypeDeMethode L_pfnMaMethode2; L_pfnMaMethode2 = UneAutreFonction; L_pfnMaMethode("a"); return 0; }
Hmmm... Merci pour cet exemple, mais je crois qu'il ne correspond pas � mon besoin, parce que j'ai mal formul� la chose.
En fait, je veux templatiser l'expression (que je sais incorrecte) :
pour une utilisation dans ce gerne l� :Code:typedef (T* (*MonTypeDeMethode)(const char *)) version_courte;
Si c'est effectivement ce que tu avais compris, c'est que je suis tr�s mauvais. :-)Code:version_courte<T>
C'est moi qui ai mal du expliquer ma m�thode:Et ensuite, l'utilisation:Code:
1
2
3
4 template<class T> struct MaMethodeTrait { typedef T* (*version_courte)(const char *); };
Code:MaMethodeTrait::version_courte<T>
P.S.: j'ai quand m�me l'impression que tu as r�solus ton probl�me de fabrique avec une solution qui te cr��s encore plus de probl�me (cette question et les questions dans boost)... Fais un petit tour sur la FAQ sur les politiques et les traits (merci Alp), je pense que cela pourra beaucoup t'apporter dans ce que tu es en train de faire.
Tu ne peux pas avoir version_courte<T>, mais uniquement version_courte<T>::type.
Petite faute de frappe (ou faute de petite frappe?). Dsl
J'ai pas toute les billes de ton pb,mais voil� ce que j'ai compris. Tu veux associer une classe A avec une classe B. C'est � dire pouvoir cr�er un objet de type B quand on te fourni un objet de type A. Dans un premier temps, tu es parti sur un patron de fabrique, ce qui me semble plut�t une bonne id�e. Mais pour associer les deux classes, tu cherche � utiliser une map entre un nom de classe "A" et une fonction de cr�ation d'objet B. Et l�, tu coince (d'o� ce fil et celui de boost). Je pense qu'utiliser une classe trait et la sp�cialiser partiellement (comme pr�sent� dans le fil http://www.developpez.net/forums/d61...tron-fabrique/) est plus ad�quat et devrait solutionner tes deux probl�mes.
Mais, bon, j'ai pas toute les billes de ton projet, alors c'est vrai que ma solution peut ne pas �tre compl�tement appropri�e. Mais, � mon avis, tu devrais prendre le temps d'essayer cette piste.
Non. Je veux cr�er un objet A quand me fournit la chaine de caract�res "objetA".
Map [ cha�ne | pointeur de fonction ].
Ladite fonction me cr�ant un objet du type donn�.
L�, c'est plus juste. :-)Citation:
Dans un premier temps, tu es parti sur un patron de fabrique, ce qui me semble plut�t une bonne id�e. Mais pour associer les deux classes, tu cherche � utiliser une map entre un nom de classe "A" et une fonction de cr�ation d'objet B.
Je vois plus ce que tu proposes comme une solution alternative.Citation:
Et l�, tu coince (d'o� ce fil et celui de boost). Je pense qu'utiliser une classe trait et la sp�cialiser partiellement (comme pr�sent� dans le fil http://www.developpez.net/forums/d61...tron-fabrique/) est plus ad�quat et devrait solutionner tes deux probl�mes.
Mais � vrai dire, ce que j'ai actuellement fonctionne, mais foire quand je mets le map et la fonction en statique. Je ne pense pas que ton trait r�soudra ce probl�me (si ?).
Mais je vais tout de m�me regarder les traits pour le probl�me ayant motiv� ce post. Mais s'il faut en passer par des dizaines de sp�cialisations de template, �a n'a pas beaucoup d'int�r�t. L'utilisation du trait pour chaque type sera en effet unique.
De m�me, l'interrogation d'un trait pour conna�tre le type de l'objet trait� m'est inutile, car je connais d�j� le type. Je veux juste all�ger une �criture pour un transtypage.
En fait, pour la derni�re ligne, j'ai probablement tort.
J'aurai sans doute besoin de conna�tre le type lorsque je voudrai appliquer un auto_ptr � l'objet renvoy� par le pointeur de fonction stock� dans le map.
Cela se pr�sentera s�rement lundi. :-)
En fait dans ton post, tu disais:
Donc, j'en d�duit qu'au moment o� tu souhaite cr�er ton nouvel objet, tu as mieux qu'une cha�ne de caract�re: tu as le type de la classe.Citation:
Je dispose du type de l'objet en question (fourni par une fonction membre), sous forme de cha�ne...
Oui
Non. (joke: ce que j'ai actuellement fonctionne, mais foire : c'est �a fonctionner?)
En fait, soit tu passes par des dizaines de sp�cialisations de template, soit tu passes par des dizaines de remplissage de map ;).
Une map est plus appropri�e pour le thread de vikki. Car lui, il ne connait pas la classe � instancier au moment de la compilation. Elle lui est donn�e par la lecture de son fichier. Par contre, j'ai l'impression que lorsque tu veux instancier 'Poppins' tu sais que c'est � partir de 'Mary'. Ce sera certainement plus robuste et performant si ton association est construite/v�rifi�e au moment de la compilation. C'est ce que te permet le concept des traits/politiques.
C'est ce que je disais aussi dans le thread de vikki. Le remplissage des map peut �tre certainement un peu all�ger (dans l'�criture) avec boost::assign.
Sinon, le template typedef tel que tu souhaiterais le faire va arriver avec C++0x ;)