j'essaye de généraliser ta méthode avec des templates
template <class T>
class toHTML {
public :
toHTML(const T &t) : _t(t) {}
friend std::ostream& operator<<(std::ostream&,const toHTML&);
private :
const T &_t;
};
// cette fonction template doit être spécialisée pour les classes
// avec une sortie HTML possible
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie";
return flux;
}
UnObjet objet;
std::ofstream fout("test.html",std::ios::out);
fout << toHTML<UnObjet >(objet) ; // <--- là, ça coïnce !
Est-ce que tu saurais comment s'y prendre ?
j'essaye de généraliser ta méthode avec des templates
template <class T>
class toHTML {
public :
toHTML(const T &t) : _t(t) {}
friend std::ostream& operator<<(std::ostream&,const toHTML&);
private :
const T &_t;
};
// cette fonction template doit être spécialisée pour les classes
// avec une sortie HTML possible
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie";
return flux;
}
UnObjet objet;
std::ofstream fout("test.html",std::ios::out);
fout << toHTML<UnObjet >(objet) ; // <--- là, ça coïnce !
Est-ce que tu saurais comment s'y prendre ?
j'essaye de généraliser ta méthode avec des templates
template <class T>
class toHTML {
public :
toHTML(const T &t) : _t(t) {}
friend std::ostream& operator<<(std::ostream&,const toHTML&);
private :
const T &_t;
};
// cette fonction template doit être spécialisée pour les classes
// avec une sortie HTML possible
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie";
return flux;
}
UnObjet objet;
std::ofstream fout("test.html",std::ios::out);
fout << toHTML<UnObjet >(objet) ; // <--- là, ça coïnce !
Est-ce que tu saurais comment s'y prendre ?
c'est "simple" mais il faut quand même avoir l'habitude de
manier des écritures du genre
ostream& (MonObject::* const pf[])( ostream&)
ce qui n'est pas (encore) mon cas :-((
mais je me suis accroché et j'ai compris.
En fait, je ne connaissait pas non plus l'existence de xalloc
et iword.
c'est "simple" mais il faut quand même avoir l'habitude de
manier des écritures du genre
ostream& (MonObject::* const pf[])( ostream&)
ce qui n'est pas (encore) mon cas :-((
mais je me suis accroché et j'ai compris.
En fait, je ne connaissait pas non plus l'existence de xalloc
et iword.
c'est "simple" mais il faut quand même avoir l'habitude de
manier des écritures du genre
ostream& (MonObject::* const pf[])( ostream&)
ce qui n'est pas (encore) mon cas :-((
mais je me suis accroché et j'ai compris.
En fait, je ne connaissait pas non plus l'existence de xalloc
et iword.
mon compilo refuse un truc du genre
template <>
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<T> > &source)
{
flux<<"blabla";
return flux;
}
mon compilo refuse un truc du genre
template <>
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<T> > &source)
{
flux<<"blabla";
return flux;
}
mon compilo refuse un truc du genre
template <>
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<T> > &source)
{
flux<<"blabla";
return flux;
}
j'essaye de généraliser ta méthode avec des templates
template <class T>
class toHTML {
public :
toHTML(const T &t) : _t(t) {}
friend std::ostream& operator<<(std::ostream&,const toHTML&);
private :
const T &_t;
};
// cette fonction template doit être spécialisée pour les cla sses
// avec une sortie HTML possible
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie";
return flux;
}
UnObjet objet;
std::ofstream fout("test.html",std::ios::out);
fout << toHTML<UnObjet >(objet) ; // <--- là, ça coïnce !
Est-ce que tu saurais comment s'y prendre ?
j'essaye de généraliser ta méthode avec des templates
template <class T>
class toHTML {
public :
toHTML(const T &t) : _t(t) {}
friend std::ostream& operator<<(std::ostream&,const toHTML&);
private :
const T &_t;
};
// cette fonction template doit être spécialisée pour les cla sses
// avec une sortie HTML possible
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie";
return flux;
}
UnObjet objet;
std::ofstream fout("test.html",std::ios::out);
fout << toHTML<UnObjet >(objet) ; // <--- là, ça coïnce !
Est-ce que tu saurais comment s'y prendre ?
j'essaye de généraliser ta méthode avec des templates
template <class T>
class toHTML {
public :
toHTML(const T &t) : _t(t) {}
friend std::ostream& operator<<(std::ostream&,const toHTML&);
private :
const T &_t;
};
// cette fonction template doit être spécialisée pour les cla sses
// avec une sortie HTML possible
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie";
return flux;
}
UnObjet objet;
std::ofstream fout("test.html",std::ios::out);
fout << toHTML<UnObjet >(objet) ; // <--- là, ça coïnce !
Est-ce que tu saurais comment s'y prendre ?
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<T> > &source)
{
flux<<"blabla";
return flux;
}
le problème avec cette solution, c'est que ça compile très bien mais que le
compilateur préfère toujours la version
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie !";
return flux;
}
qui est dans le fichier de déclaration/définition de template <class T>
toHTML;
donc en fait, c'est pas utilisable :-((
si j'écris
template <>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<std::string> > &source)
{
flux<<"ClasseTemplate -> std::string !";
return flux;
}
avec un paramètre déjà défini pour T, là c'est la bonne version de
l'opérateur qui est choisie !
c'est pour ça que je pressens que l'écriture est du type
template <>
template<class T>
std::ostream& operator<<(std::ostream &flux,const toHTML< ClasseTemplate<T>&source)
{
flux<<"ClasseTemplate -> std::string !";
return flux;
}
mais mon compilo me met délcration de modèle incorrecte
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<T> > &source)
{
flux<<"blabla";
return flux;
}
le problème avec cette solution, c'est que ça compile très bien mais que le
compilateur préfère toujours la version
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie !";
return flux;
}
qui est dans le fichier de déclaration/définition de template <class T>
toHTML;
donc en fait, c'est pas utilisable :-((
si j'écris
template <>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<std::string> > &source)
{
flux<<"ClasseTemplate -> std::string !";
return flux;
}
avec un paramètre déjà défini pour T, là c'est la bonne version de
l'opérateur qui est choisie !
c'est pour ça que je pressens que l'écriture est du type
template <>
template<class T>
std::ostream& operator<<(std::ostream &flux,const toHTML< ClasseTemplate<T>
&source)
{
flux<<"ClasseTemplate -> std::string !";
return flux;
}
mais mon compilo me met délcration de modèle incorrecte
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<T> > &source)
{
flux<<"blabla";
return flux;
}
le problème avec cette solution, c'est que ça compile très bien mais que le
compilateur préfère toujours la version
template <class T>
std::ostream& operator<<(std::ostream &flux,const toHTML<T> &source)
{
flux<<"sortie HTML non définie !";
return flux;
}
qui est dans le fichier de déclaration/définition de template <class T>
toHTML;
donc en fait, c'est pas utilisable :-((
si j'écris
template <>
std::ostream& operator<<(std::ostream &flux,const toHTML<
ClasseTemplate<std::string> > &source)
{
flux<<"ClasseTemplate -> std::string !";
return flux;
}
avec un paramètre déjà défini pour T, là c'est la bonne version de
l'opérateur qui est choisie !
c'est pour ça que je pressens que l'écriture est du type
template <>
template<class T>
std::ostream& operator<<(std::ostream &flux,const toHTML< ClasseTemplate<T>&source)
{
flux<<"ClasseTemplate -> std::string !";
return flux;
}
mais mon compilo me met délcration de modèle incorrecte
C'est terrible, ça marche pas sur mon compilo...et je sens
qu'il est vraiment un peu faible pour gérer la compléxité des
templates
1) d'abord, j'ai dû faire une petite modification pour que l'unité so it
compilée
Discriminator< &U::displayHTML >* = 0 ) ---> Discriminat or<
&(U::displayHTML) > * = 0 )
{
obj.displayHTML( dest ) ;
}
donc j'ai dû mettre U::displayHTML entre parenthèses et aussi mettre un
espace entre * et = (sinon il interprète comme l'opérateur *= )
2) l'unité compile enfin
si je teste avec une classe qui a défini doDisplay, ça marche
si je teste avec une classe qui n'a pas défini doDisplay, j'ai un mess age
d'erreur...à l'édition de liens
Il me met :
Le qualificateur de type dépendant 'MaClasse' n'a aucun symbole nommé
'displayHTML'
Je ne comprends pas pourquoi le compilateur ne choisit pas la deuxième
version de doDisplay
Dommage, je trouve ta solution assez élégante...
C'est terrible, ça marche pas sur mon compilo...et je sens
qu'il est vraiment un peu faible pour gérer la compléxité des
templates
1) d'abord, j'ai dû faire une petite modification pour que l'unité so it
compilée
Discriminator< &U::displayHTML >* = 0 ) ---> Discriminat or<
&(U::displayHTML) > * = 0 )
{
obj.displayHTML( dest ) ;
}
donc j'ai dû mettre U::displayHTML entre parenthèses et aussi mettre un
espace entre * et = (sinon il interprète comme l'opérateur *= )
2) l'unité compile enfin
si je teste avec une classe qui a défini doDisplay, ça marche
si je teste avec une classe qui n'a pas défini doDisplay, j'ai un mess age
d'erreur...à l'édition de liens
Il me met :
Le qualificateur de type dépendant 'MaClasse' n'a aucun symbole nommé
'displayHTML'
Je ne comprends pas pourquoi le compilateur ne choisit pas la deuxième
version de doDisplay
Dommage, je trouve ta solution assez élégante...
C'est terrible, ça marche pas sur mon compilo...et je sens
qu'il est vraiment un peu faible pour gérer la compléxité des
templates
1) d'abord, j'ai dû faire une petite modification pour que l'unité so it
compilée
Discriminator< &U::displayHTML >* = 0 ) ---> Discriminat or<
&(U::displayHTML) > * = 0 )
{
obj.displayHTML( dest ) ;
}
donc j'ai dû mettre U::displayHTML entre parenthèses et aussi mettre un
espace entre * et = (sinon il interprète comme l'opérateur *= )
2) l'unité compile enfin
si je teste avec une classe qui a défini doDisplay, ça marche
si je teste avec une classe qui n'a pas défini doDisplay, j'ai un mess age
d'erreur...à l'édition de liens
Il me met :
Le qualificateur de type dépendant 'MaClasse' n'a aucun symbole nommé
'displayHTML'
Je ne comprends pas pourquoi le compilateur ne choisit pas la deuxième
version de doDisplay
Dommage, je trouve ta solution assez élégante...
quel compilo me conseilles-tu POUR WINDOWS ?
(j'ai pas le choix, c'est le client qui commande)
J'ai aussi Visual Studio.net 2002 pro
je sais que c'est une question souvent posée...mais j'ai du
mal à me décider de changer. L'IDE de BCB est conviviale et
intuitive et je trouve la VCL pratique et fournie pour
développer vite des applications "pas trop" volumineuses.
Mais là, je suis sur un plus gros projet et je veux en
profiter pour apprendre quelque chose (je ne suis pas
informaticien...) mais je suis aussi pressé par le temps et
j'ai un peu peur des compilos non documentés...
quel compilo me conseilles-tu POUR WINDOWS ?
(j'ai pas le choix, c'est le client qui commande)
J'ai aussi Visual Studio.net 2002 pro
je sais que c'est une question souvent posée...mais j'ai du
mal à me décider de changer. L'IDE de BCB est conviviale et
intuitive et je trouve la VCL pratique et fournie pour
développer vite des applications "pas trop" volumineuses.
Mais là, je suis sur un plus gros projet et je veux en
profiter pour apprendre quelque chose (je ne suis pas
informaticien...) mais je suis aussi pressé par le temps et
j'ai un peu peur des compilos non documentés...
quel compilo me conseilles-tu POUR WINDOWS ?
(j'ai pas le choix, c'est le client qui commande)
J'ai aussi Visual Studio.net 2002 pro
je sais que c'est une question souvent posée...mais j'ai du
mal à me décider de changer. L'IDE de BCB est conviviale et
intuitive et je trouve la VCL pratique et fournie pour
développer vite des applications "pas trop" volumineuses.
Mais là, je suis sur un plus gros projet et je veux en
profiter pour apprendre quelque chose (je ne suis pas
informaticien...) mais je suis aussi pressé par le temps et
j'ai un peu peur des compilos non documentés...