Specialisation partielle de fonction membre de classes templates... - C++ - Programmation
Marsh Posté le 24-11-2005 à 19:32:44
Ha oui, merci (3 ans déja...)
Et sinon, pour les templates
Marsh Posté le 24-11-2005 à 20:00:31
comme tu as pu le remarquer, ce que tu veux faire n'est pas légal. Voici une modeste façon de contourner le problème, s'appuyant sur la résolution de surcharge.
A la résolution de surcharge, une fonction non template est élue face à une fonction template uniquement s'il y a match exact. Les conversions implicites ne sont pas considérées. C'est pourquoi il faut fournir une surcharge char const*.
Code :
|
Marsh Posté le 24-11-2005 à 21:17:52
edit (conneries supprimées) : Ha mais si, j'ai mal lu. Bon faudra vraiment que je réfléchisse à ton truc demain
Merci !
Marsh Posté le 24-11-2005 à 23:23:13
YES !
beaucoup plus simple en apparance. friend for ever
Code :
|
(*) le minuscule (inexistant normalement) désagrément de cette technique est la pollution de la namespace scope par la fonction libre freef. Cepandant, avec un compilateur a la norme, cette ligne ne doit pas compiler. Si elle compile, c'est que le compilateur supporte encore l'extension "friend name injection" chère à Barton & Nackman. gcc < 4.1 la supporte par défaut, et une beta d'aout de gcc-4.1 que j'ai, continue de compiler ce code (?!).
edit : changement de l'ordre de declaration
Marsh Posté le 25-11-2005 à 00:38:21
Heu j'ai pas tout suivi la
Quelque chose me dit que je vais passer pas mal de temps à lire de gros pavés d'explication du bouzin, demain (enfin tout à l'heure).
Ca me parait quand même vachement space comme truc, t'aurais pas deux trois explications sur le pourquoi et comment ca marche ? (il est minuit et demi, aussi, ca aide pas...)
edit : et passe pas sous VS7...
Marsh Posté le 25-11-2005 à 00:46:31
Mackila a écrit : Heu j'ai pas tout suivi la |
ne regarde que la deuxième solution, la première est vraiment mauvaise en fait.
Mackila a écrit : Ca me parait quand même vachement space comme truc, t'aurais pas deux trois explications sur le pourquoi et comment ca marche ? (il est minuit et demi, aussi, ca aide pas...) |
si, qu'est-ce que tu ne comprends pas ? ( en meme temps, c'est minuit et demi ...)
Marsh Posté le 25-11-2005 à 00:47:34
ReplyMarsh Posté le 25-11-2005 à 18:26:58
Compilation... |
Marsh Posté le 25-11-2005 à 18:45:58
normal. Je me suis planté, la deuxième solution que j'ai proposée est complètement fausse, même si elle marche par chance chez moi (il faut dire que gcc ne m'a pas aidé d'un pouce). J'ai trouvé d'autres solutions ... J'espère que ce seront les bonnes
la première :
Code :
|
la deuxième, plus compliqué, moins extensible, moins bonne tout court, mais intéressante (à partir d'un exemple à peine différent) :
Code :
|
avec peut etre un travail à faire pour épurer les cv-qualifiers, mais bon.
Marsh Posté le 25-11-2005 à 20:27:54
La premiere me plait beaucoup plus (et en plus elle fonctionne ).
J'adapterai ca sur mon code lundi (en rajoutant un bon pavé d'explications pour le gars qui repasserait éventuellement derrière, que les méthodes que je spécialise, c'est des opérateurs, ca a tendance à faire une syntaxe comme qui dirait un peu lourde )
Merci !
Marsh Posté le 23-11-2005 à 01:13:17
...C'est faisable ? Les choses n'ont pas évolué depuis le dernier sujet ?
ma reference
J'aurais aimé spécialiser le comportement d'une seule méthode de ma classe lorsqu'un seul des paramètres change. La spécialisation fonctionne bien quand je spécialise ma méthode complètement...
Pour l'instant j'ai fait le crados (j'ai sorti mon code spécialisé dans une fonction, et j'ai écrit autant de spécialisations complètes de ma méthode - 3 - que nécessaire), mais ca ne me plait pas.