Mais pour les classes de types string, cette fonction ne fonctionne
pas pour plusieurs raisons:
l'op=E9rateur << s'arr=EAte au premier espace. En plus de cela je voudrais
rajouter des guillemets.
cette derni=E8re fonction n'est bien s=FBr jamais appel=E9e. C'est la
fonction plus g=E9n=E9rale qui est appel=E9e =E0 la place. Est-ce qu'il exi=
ste
un moyen de contourner ce probl=E8me ? Je tourne sous visual.
Alexandre.
PS: j'oublierais pas de rajouter les const l=E0 ou il faut, promis :-)
Mais pour les classes de types string, cette fonction ne fonctionne pas pour plusieurs raisons: l'opérateur << s'arrête au premier espace. En plus de cela je voudrais rajouter des guillemets.
cette dernière fonction n'est bien sûr jamais appelée. C'est la fonction plus générale qui est appelée à la place. Est-ce qu'il existe un moyen de contourner ce problème ? Je tourne sous visual.
Tu peux essayer de donner un code minimal mais complet reproduisant le probleme? (qu'est-ce que T ici par exemple).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais pour les classes de types string, cette fonction ne fonctionne
pas pour plusieurs raisons:
l'opérateur << s'arrête au premier espace. En plus de cela je voudrais
rajouter des guillemets.
cette dernière fonction n'est bien sûr jamais appelée. C'est la
fonction plus générale qui est appelée à la place. Est-ce qu'il existe
un moyen de contourner ce problème ? Je tourne sous visual.
Tu peux essayer de donner un code minimal mais complet reproduisant le
probleme? (qu'est-ce que T ici par exemple).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais pour les classes de types string, cette fonction ne fonctionne pas pour plusieurs raisons: l'opérateur << s'arrête au premier espace. En plus de cela je voudrais rajouter des guillemets.
cette dernière fonction n'est bien sûr jamais appelée. C'est la fonction plus générale qui est appelée à la place. Est-ce qu'il existe un moyen de contourner ce problème ? Je tourne sous visual.
Tu peux essayer de donner un code minimal mais complet reproduisant le probleme? (qu'est-ce que T ici par exemple).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais pour les classes de types string, cette fonction ne fonctionne pas pour plusieurs raisons: l'opérateur << s'arrête au premier espace. En plus de cela je voudrais rajouter des guillemets.
Les flux fonctionnent en reconnaissant les formats de chaines. Si tu ne veux pas que ton flux coupe les mots, il faut que tu désactive le comportement. La fonction membre std::istream::setf avec std::ios_base::skipws e l'entete <iomanip>.
Mais pour les classes de types string, cette fonction ne fonctionne
pas pour plusieurs raisons:
l'opérateur << s'arrête au premier espace. En plus de cela je voudrais
rajouter des guillemets.
Les flux fonctionnent en reconnaissant les formats de chaines. Si tu
ne veux pas que ton flux coupe les mots, il faut que tu désactive le
comportement. La fonction membre std::istream::setf avec
std::ios_base::skipws e l'entete <iomanip>.
Mais pour les classes de types string, cette fonction ne fonctionne pas pour plusieurs raisons: l'opérateur << s'arrête au premier espace. En plus de cela je voudrais rajouter des guillemets.
Les flux fonctionnent en reconnaissant les formats de chaines. Si tu ne veux pas que ton flux coupe les mots, il faut que tu désactive le comportement. La fonction membre std::istream::setf avec std::ios_base::skipws e l'entete <iomanip>.
cette dernière fonction n'est bien sûr jamais appelée. C'est la fonction plus générale qui est appelée à la place. Est-ce qu'il existe un moyen de contourner ce problème ? Je tourne sous visual.
Cette fonction ne compile pas chez moi, et pour cause: T n'est pas défini.
cette dernière fonction n'est bien sûr jamais appelée. C'est la
fonction plus générale qui est appelée à la place. Est-ce qu'il existe
un moyen de contourner ce problème ? Je tourne sous visual.
Cette fonction ne compile pas chez moi, et pour cause: T n'est pas défini.
cette dernière fonction n'est bien sûr jamais appelée. C'est la fonction plus générale qui est appelée à la place. Est-ce qu'il existe un moyen de contourner ce problème ? Je tourne sous visual.
Cette fonction ne compile pas chez moi, et pour cause: T n'est pas défini.
Mais pour les classes de types string, cette fonction ne fonctionne pas pour plusieurs raisons: l'opérateur << s'arrête au premier espace. En plus de cela je voudrai s rajouter des guillemets.
Si j'ai bien compris, ce que tu veux, c'est une specialisation partielle, et ça ne marche que pour les classes. Tu peux, en revanche, surcharger un template de fonction avec un autre template de fonction : dans le cas où la déduction de type marche sur les deux, et les deux instantiations ne se distinguent pas autrement, c'est celle en provenance du template le plus spécialisé qui sera choisi. Donc, donné :
template<typename T> std::string ReadFile::ValToString( T const& in );
template<typename T> std::string ReadFile::ValToString( std::vector<T> const& in );
std::string ReadFile::ValToString( std::string const& in );
-- Pour la plupart des types, seulement la première est viable ; elle sera donc choisie.
-- Pour std::string, le choix se fait entre la première et la dernière. Dans de tels cas d'égalité, préférence est donnée à la fonction qui n'est pas une instance d'un template.
-- Pour std::vector<int>, etc., le choix se fait entre la première et la deuxième, avec préférence pour la deuxième, parce que le template dont elle provient est plus specialisé.
Mais pour les classes de types string, cette fonction ne fonctionne
pas pour plusieurs raisons:
l'opérateur << s'arrête au premier espace. En plus de cela je voudrai s
rajouter des guillemets.
Si j'ai bien compris, ce que tu veux, c'est une specialisation
partielle, et ça ne marche que pour les classes. Tu peux, en
revanche, surcharger un template de fonction avec un autre
template de fonction : dans le cas où la déduction de type
marche sur les deux, et les deux instantiations ne se
distinguent pas autrement, c'est celle en provenance du template
le plus spécialisé qui sera choisi. Donc, donné :
template<typename T>
std::string ReadFile::ValToString( T const& in );
template<typename T>
std::string ReadFile::ValToString( std::vector<T> const& in );
std::string ReadFile::ValToString( std::string const& in );
-- Pour la plupart des types, seulement la première est
viable ; elle sera donc choisie.
-- Pour std::string, le choix se fait entre la première et la
dernière. Dans de tels cas d'égalité, préférence est donnée
à la fonction qui n'est pas une instance d'un template.
-- Pour std::vector<int>, etc., le choix se fait entre la
première et la deuxième, avec préférence pour la deuxième,
parce que le template dont elle provient est plus
specialisé.
Mais pour les classes de types string, cette fonction ne fonctionne pas pour plusieurs raisons: l'opérateur << s'arrête au premier espace. En plus de cela je voudrai s rajouter des guillemets.
Si j'ai bien compris, ce que tu veux, c'est une specialisation partielle, et ça ne marche que pour les classes. Tu peux, en revanche, surcharger un template de fonction avec un autre template de fonction : dans le cas où la déduction de type marche sur les deux, et les deux instantiations ne se distinguent pas autrement, c'est celle en provenance du template le plus spécialisé qui sera choisi. Donc, donné :
template<typename T> std::string ReadFile::ValToString( T const& in );
template<typename T> std::string ReadFile::ValToString( std::vector<T> const& in );
std::string ReadFile::ValToString( std::string const& in );
-- Pour la plupart des types, seulement la première est viable ; elle sera donc choisie.
-- Pour std::string, le choix se fait entre la première et la dernière. Dans de tels cas d'égalité, préférence est donnée à la fonction qui n'est pas une instance d'un template.
-- Pour std::vector<int>, etc., le choix se fait entre la première et la deuxième, avec préférence pour la deuxième, parce que le template dont elle provient est plus specialisé.
Attention, il manque les "const" un peu partout ici.
AG
On Mar 11, 4:18 pm, Jean-Marc Bourguet wrote:
Tu peux essayer de donner un code minimal mais complet reproduisant le probleme? (qu'est-ce que T ici par exemple).
Bonjour Jean-Marc.
Oui voilà mon code minimal qui compile, tourne, mais ne fonctionne pas. Je remarque que les autres on répondu, donc je vais voir ce qu'ils disent. mais en attendant voilà mon code, sans les const un peu partout comme il a déjà été fait remarqué. Je regarde les autres réponses.
On Mar 11, 4:18 pm, Jean-Marc Bourguet <j...@bourguet.org> wrote:
Tu peux essayer de donner un code minimal mais complet reproduisant le
probleme? (qu'est-ce que T ici par exemple).
Bonjour Jean-Marc.
Oui voilà mon code minimal qui compile, tourne, mais ne fonctionne
pas. Je remarque que les autres on répondu, donc je vais voir ce
qu'ils disent. mais en attendant voilà mon code, sans les const un peu
partout comme il a déjà été fait remarqué. Je regarde les autres
réponses.
Tu peux essayer de donner un code minimal mais complet reproduisant le probleme? (qu'est-ce que T ici par exemple).
Bonjour Jean-Marc.
Oui voilà mon code minimal qui compile, tourne, mais ne fonctionne pas. Je remarque que les autres on répondu, donc je vais voir ce qu'ils disent. mais en attendant voilà mon code, sans les const un peu partout comme il a déjà été fait remarqué. Je regarde les autres réponses.
-- Pour std::vector<int>, etc., le choix se fait entre la première et la deuxième, avec préférence pour la deuxiè me, parce que le template dont elle provient est plus specialisé.
Bonjour James,
Dans l'exemple du code que j'ai posté plus haut, il semble que mon compilo choisisse la première au lieu de la deuxième (les partenthèse s ne sont pas affichées). J'ai Visual C++ Express 2008.
Alexandre.
On Mar 11, 11:42 pm, James Kanze <james.ka...@gmail.com> wrote:
-- Pour std::vector<int>, etc., le choix se fait entre la
première et la deuxième, avec préférence pour la deuxiè me,
parce que le template dont elle provient est plus
specialisé.
Bonjour James,
Dans l'exemple du code que j'ai posté plus haut, il semble que mon
compilo choisisse la première au lieu de la deuxième (les partenthèse s
ne sont pas affichées). J'ai Visual C++ Express 2008.
-- Pour std::vector<int>, etc., le choix se fait entre la première et la deuxième, avec préférence pour la deuxiè me, parce que le template dont elle provient est plus specialisé.
Bonjour James,
Dans l'exemple du code que j'ai posté plus haut, il semble que mon compilo choisisse la première au lieu de la deuxième (les partenthèse s ne sont pas affichées). J'ai Visual C++ Express 2008.
Alexandre.
Jean-Marc Bourguet
AG writes:
On Mar 11, 4:18 pm, Jean-Marc Bourguet wrote: > Tu peux essayer de donner un code minimal mais complet reproduisant le > probleme? (qu'est-ce que T ici par exemple).
Bonjour Jean-Marc.
Oui voilà mon code minimal qui compile, tourne, mais ne fonctionne pas. Je remarque que les autres on répondu, donc je vais voir ce qu'ils disent. mais en attendant voilà mon code, sans les const un peu partout comme il a déjà été fait remarqué. Je regarde les autres réponses.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
AG <heyji2@gmail.com> writes:
On Mar 11, 4:18 pm, Jean-Marc Bourguet <j...@bourguet.org> wrote:
> Tu peux essayer de donner un code minimal mais complet reproduisant le
> probleme? (qu'est-ce que T ici par exemple).
Bonjour Jean-Marc.
Oui voilà mon code minimal qui compile, tourne, mais ne fonctionne
pas. Je remarque que les autres on répondu, donc je vais voir ce
qu'ils disent. mais en attendant voilà mon code, sans les const un peu
partout comme il a déjà été fait remarqué. Je regarde les autres
réponses.
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On Mar 11, 4:18 pm, Jean-Marc Bourguet wrote: > Tu peux essayer de donner un code minimal mais complet reproduisant le > probleme? (qu'est-ce que T ici par exemple).
Bonjour Jean-Marc.
Oui voilà mon code minimal qui compile, tourne, mais ne fonctionne pas. Je remarque que les autres on répondu, donc je vais voir ce qu'ils disent. mais en attendant voilà mon code, sans les const un peu partout comme il a déjà été fait remarqué. Je regarde les autres réponses.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
AG
On Mar 12, 11:21 am, Jean-Marc Bourguet wrote:
Ton parametre template est int, pas vector<int> si tu veux la deuxieme surcharge.
well well well: ok, si je met <int> ça marche. indeed.
Mais je voudrais pouvoir utiliser ValToString<vector<int> >(v):
c'est pas possible ?
AG.
On Mar 12, 11:21 am, Jean-Marc Bourguet <j...@bourguet.org> wrote:
Ton parametre template est int, pas vector<int> si tu veux la deuxieme
surcharge.
well well well: ok, si je met <int> ça marche. indeed.
Mais je voudrais pouvoir utiliser ValToString<vector<int> >(v):
Ton parametre template est int, pas vector<int> si tu veux la deuxieme surcharge.
well well well: ok, si je met <int> ça marche. indeed.
Mais je voudrais pouvoir utiliser ValToString<vector<int> >(v):
c'est pas possible ?
AG.
Jean-Marc Bourguet
AG writes:
On Mar 12, 11:21 am, Jean-Marc Bourguet wrote: > Ton parametre template est int, pas vector<int> si tu veux la deuxieme > surcharge.
well well well: ok, si je met <int> ça marche. indeed.
Mais je voudrais pouvoir utiliser ValToString<vector<int> >(v):
c'est pas possible ?
Tu peux ne pas mettre de <> du tout: ValToString(v)
mais pour faire ce que tu veux, ce n'est plus de la surcharge mais de la specialisation partielle qu'il faut et ce n'est possible qu'avec les classes. Donc il faut faire intervenir une classe, par exemple dans l'implementation de ValToString qui peut donc ne plus etre surchargee.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
AG <heyji2@gmail.com> writes:
On Mar 12, 11:21 am, Jean-Marc Bourguet <j...@bourguet.org> wrote:
> Ton parametre template est int, pas vector<int> si tu veux la deuxieme
> surcharge.
well well well: ok, si je met <int> ça marche. indeed.
Mais je voudrais pouvoir utiliser ValToString<vector<int> >(v):
c'est pas possible ?
Tu peux ne pas mettre de <> du tout: ValToString(v)
mais pour faire ce que tu veux, ce n'est plus de la surcharge mais de la
specialisation partielle qu'il faut et ce n'est possible qu'avec les
classes. Donc il faut faire intervenir une classe, par exemple dans
l'implementation de ValToString qui peut donc ne plus etre surchargee.
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On Mar 12, 11:21 am, Jean-Marc Bourguet wrote: > Ton parametre template est int, pas vector<int> si tu veux la deuxieme > surcharge.
well well well: ok, si je met <int> ça marche. indeed.
Mais je voudrais pouvoir utiliser ValToString<vector<int> >(v):
c'est pas possible ?
Tu peux ne pas mettre de <> du tout: ValToString(v)
mais pour faire ce que tu veux, ce n'est plus de la surcharge mais de la specialisation partielle qu'il faut et ce n'est possible qu'avec les classes. Donc il faut faire intervenir une classe, par exemple dans l'implementation de ValToString qui peut donc ne plus etre surchargee.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org