2
J'ai une classe qui est dérivée de ostream:Création Manipulateurs ostream pour une classe spécifique
class my_ostream: public std::ostream
{
// ...
}
Je veux faire un manipulateur (par exemple do_something
), qui travaille spécifiquement à cette classe, comme ceci:
my_ostream s;
s << "some text" << do_something << "some more text";
j'ai fait ce qui suit:
std::ostream &do_something(std::ostream &os)
{
my_ostream *s = dynamic_cast<my_ostream*>(&os);
if (s != NULL)
{
// do something
}
return os;
}
Cela fonctionne, mais est plutôt laid. J'ai essayé ce qui suit:
my_ostream &do_something(my_ostream &s)
{
// do something
return s;
}
Cela ne fonctionne pas. J'ai également essayé une autre approche:
class my_ostream: public std::ostream
{
// ...
my_ostream &operator<<(const do_something & x)
{
// do something
return *this;
}
}
Cela ne fonctionne toujours pas.
Je l'ai essayé, et ça ne marche pas. Il compile, mais la fonction de manipulation n'est pas appelée. Je trouve cela vraiment étrange, parce que c'est exactement comme cela est fait dans 'std :: ostream'. – petersohn
@petersohn: cela doit être un problème avec votre compilateur, car le code ci-dessus fonctionne pour moi tel qu'il est (g ++ 3.4.4) – catwalk
Je voulais juste ajouter que j'ai regardé toute la journée pour cette réponse et ce juste fonctionne comme prévu (g ++ 4.7.0). – cubuspl42