Je crois qu'il est possible de spécialiser une telle méthode, mais je
n'ai trouvé d'aide nulle part à ce sujet précis.
J'ai aussi testé une multitude d'écritures diférentes sans succès.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gourgouilloult
Je crois qu'il est possible de spécialiser une telle méthode, mais je n'ai trouvé d'aide nulle part à ce sujet précis. J'ai aussi testé une multitude d'écritures diférentes sans succès.
Pour ce que j'ai cru en retenir, ça n'est pas possible : les modèles de classes se spécialisent, les modèles de fonctions se surchargent. Par exemple :
struct A { template <class T> void f (const T t) { cout << "tmpl: " << t << 'n'; } void f (float f) { cout << "float: " << f << 'n'; } };
ostream& operator << (ostream& os, const A a) { os << 'a'; return os; }
void f () { A a; a.f (3.14f); a.f (3.14); a.f (a); }
Affiche bien (en tout cas avec un gcc-3.3 made in mdk de base) comme on (je ?-) pourrait s'y attendre :
float: 3.14 tmpl: 3.14 tmpl: a
Pour des explications concernant cette apparente discrimination, il vaut mieux aller voir l'historique du groupe par google. Par ailleurs, je suis passé tout à l'heure devant un GotW (http://www.gotw.ca/gotw/049.htm) qui aurait tendance, maintenant que je m'y penchouille, à me laisser supposer que je me trompe...
Donc si ça sert à quelque chose d'en faire un template malgré tout (j'avoue ne même pas me poser la question... oui, il est tard ;), on devrait au moins pouvoir écrire
struct A { template <class T> void f (const T); template <> void f <float> (float); };
[...] qui ne marche pas (chez moi). Fainéantement, je garde mes doutes pour l'instant. D'autant que le GotW en question est loin d'être récent, et qu'on sait tous ce qu'il en est d'assimiler ce qu'un compilo accepte ou rejette à ce que dit le langage.
Merci de votre aide éventuelle
La question revient régulièrement. Il y a donc plus d'aide que nécessaire dans les archives ;)
SecatOR
Gourgou
Je crois qu'il est possible de spécialiser une telle méthode, mais je
n'ai trouvé d'aide nulle part à ce sujet précis.
J'ai aussi testé une multitude d'écritures diférentes sans succès.
Pour ce que j'ai cru en retenir, ça n'est pas possible : les modèles de
classes se spécialisent, les modèles de fonctions se surchargent. Par
exemple :
struct A {
template <class T> void f (const T t) {
cout << "tmpl: " << t << 'n';
}
void f (float f) {
cout << "float: " << f << 'n';
}
};
ostream& operator << (ostream& os, const A a) {
os << 'a';
return os;
}
void f () {
A a;
a.f (3.14f);
a.f (3.14);
a.f (a);
}
Affiche bien (en tout cas avec un gcc-3.3 made in mdk de base) comme on
(je ?-) pourrait s'y attendre :
float: 3.14
tmpl: 3.14
tmpl: a
Pour des explications concernant cette apparente discrimination, il vaut
mieux aller voir l'historique du groupe par google. Par ailleurs, je
suis passé tout à l'heure devant un GotW
(http://www.gotw.ca/gotw/049.htm) qui aurait tendance, maintenant que je
m'y penchouille, à me laisser supposer que je me trompe...
Donc si ça sert à quelque chose d'en faire un template malgré tout
(j'avoue ne même pas me poser la question... oui, il est tard ;), on
devrait au moins pouvoir écrire
struct A {
template <class T> void f (const T);
template <> void f <float> (float);
};
[...] qui ne marche pas (chez moi). Fainéantement, je garde mes doutes
pour l'instant. D'autant que le GotW en question est loin d'être récent,
et qu'on sait tous ce qu'il en est d'assimiler ce qu'un compilo accepte
ou rejette à ce que dit le langage.
Merci de votre aide éventuelle
La question revient régulièrement. Il y a donc plus d'aide que
nécessaire dans les archives ;)
Je crois qu'il est possible de spécialiser une telle méthode, mais je n'ai trouvé d'aide nulle part à ce sujet précis. J'ai aussi testé une multitude d'écritures diférentes sans succès.
Pour ce que j'ai cru en retenir, ça n'est pas possible : les modèles de classes se spécialisent, les modèles de fonctions se surchargent. Par exemple :
struct A { template <class T> void f (const T t) { cout << "tmpl: " << t << 'n'; } void f (float f) { cout << "float: " << f << 'n'; } };
ostream& operator << (ostream& os, const A a) { os << 'a'; return os; }
void f () { A a; a.f (3.14f); a.f (3.14); a.f (a); }
Affiche bien (en tout cas avec un gcc-3.3 made in mdk de base) comme on (je ?-) pourrait s'y attendre :
float: 3.14 tmpl: 3.14 tmpl: a
Pour des explications concernant cette apparente discrimination, il vaut mieux aller voir l'historique du groupe par google. Par ailleurs, je suis passé tout à l'heure devant un GotW (http://www.gotw.ca/gotw/049.htm) qui aurait tendance, maintenant que je m'y penchouille, à me laisser supposer que je me trompe...
Donc si ça sert à quelque chose d'en faire un template malgré tout (j'avoue ne même pas me poser la question... oui, il est tard ;), on devrait au moins pouvoir écrire
struct A { template <class T> void f (const T); template <> void f <float> (float); };
[...] qui ne marche pas (chez moi). Fainéantement, je garde mes doutes pour l'instant. D'autant que le GotW en question est loin d'être récent, et qu'on sait tous ce qu'il en est d'assimiler ce qu'un compilo accepte ou rejette à ce que dit le langage.
Merci de votre aide éventuelle
La question revient régulièrement. Il y a donc plus d'aide que nécessaire dans les archives ;)
SecatOR
Gourgou
Fabrizio Duhem
"SecatOR" a écrit dans le message de news: 402944d9$0$285$
Bonjour,
J'ai une méthode template d'une classe non template, et je n'arrive pas à en implémenter une version spécialisée, soit:
Je crois qu'il est possible de spécialiser une telle méthode, mais je n'ai trouvé d'aide nulle part à ce sujet précis. J'ai aussi testé une multitude d'écritures diférentes sans succès.
Merci de votre aide éventuelle
SecatOR
bonjour
pourquoi ne pas spécialiser des foncteurs. exemples:
Je crois qu'il est possible de spécialiser une telle méthode, mais je
n'ai trouvé d'aide nulle part à ce sujet précis.
J'ai aussi testé une multitude d'écritures diférentes sans succès.
Merci de votre aide éventuelle
SecatOR
bonjour
pourquoi ne pas spécialiser des foncteurs.
exemples:
Je crois qu'il est possible de spécialiser une telle méthode, mais je n'ai trouvé d'aide nulle part à ce sujet précis. J'ai aussi testé une multitude d'écritures diférentes sans succès.
Merci de votre aide éventuelle
SecatOR
bonjour
pourquoi ne pas spécialiser des foncteurs. exemples:
Je viens de noter qu'on a tous répondu avec des structs. Mais ça n'a pas l'air d'être des histoires de niveau d'accès (oui, j'ai testouillé ça en 2sec sur un compilo... je sais que c'est Mal ;)
et le compilateur (VC++ 6.0) n'accepte pas le code
Juste au passage, le ';' n'a rien à voir avec la définition de la fonction. Dis plus simplement, il n'est pas nécessaire.
Je crois qu'il est possible de spécialiser une telle méthode, mais je n'ai trouvé d'aide nulle part à ce sujet précis. J'ai aussi testé une multitude d'écritures diférentes sans succès.
Tant qu'à faire, on pourrait avoir une petite idée du message d'erreur ? (Et éventuellement d'une ou deux écritures supplémentaires, accompagnées de leurs messages d'erreurs, si toutefois ces derniers diffèrent.)
Je viens de noter qu'on a tous répondu avec des structs. Mais ça n'a pas
l'air d'être des histoires de niveau d'accès (oui, j'ai testouillé ça en
2sec sur un compilo... je sais que c'est Mal ;)
et le compilateur (VC++ 6.0) n'accepte pas le code
Juste au passage, le ';' n'a rien à voir avec la définition de la
fonction. Dis plus simplement, il n'est pas nécessaire.
Je crois qu'il est possible de spécialiser une telle méthode, mais je
n'ai trouvé d'aide nulle part à ce sujet précis.
J'ai aussi testé une multitude d'écritures diférentes sans succès.
Tant qu'à faire, on pourrait avoir une petite idée du message d'erreur ?
(Et éventuellement d'une ou deux écritures supplémentaires, accompagnées
de leurs messages d'erreurs, si toutefois ces derniers diffèrent.)
Je viens de noter qu'on a tous répondu avec des structs. Mais ça n'a pas l'air d'être des histoires de niveau d'accès (oui, j'ai testouillé ça en 2sec sur un compilo... je sais que c'est Mal ;)
et le compilateur (VC++ 6.0) n'accepte pas le code
Juste au passage, le ';' n'a rien à voir avec la définition de la fonction. Dis plus simplement, il n'est pas nécessaire.
Je crois qu'il est possible de spécialiser une telle méthode, mais je n'ai trouvé d'aide nulle part à ce sujet précis. J'ai aussi testé une multitude d'écritures diférentes sans succès.
Tant qu'à faire, on pourrait avoir une petite idée du message d'erreur ? (Et éventuellement d'une ou deux écritures supplémentaires, accompagnées de leurs messages d'erreurs, si toutefois ces derniers diffèrent.)
c'est en effet ce qui devrait être mais VC++ indique: "fatal error C1001: internal compiler error" marrant non ? la MSDN documente globalement cette erreur par "mauvaise syntaxe ou erreur d'optimisation". Or je suis en debug, il n'y a donc aucune optimisation.
pour l'écriture précédente, on m'indique: "overloaded member function not found"
c'est en effet ce qui devrait être mais VC++ indique:
"fatal error C1001: internal compiler error"
marrant non ?
la MSDN documente globalement cette erreur par "mauvaise syntaxe ou
erreur d'optimisation". Or je suis en debug, il n'y a donc aucune
optimisation.
pour l'écriture précédente, on m'indique:
"overloaded member function not found"
c'est en effet ce qui devrait être mais VC++ indique: "fatal error C1001: internal compiler error" marrant non ? la MSDN documente globalement cette erreur par "mauvaise syntaxe ou erreur d'optimisation". Or je suis en debug, il n'y a donc aucune optimisation.
pour l'écriture précédente, on m'indique: "overloaded member function not found"