Fonction qui imprime quelque chose à std::ostream et retourne std::ostream?

Je veux écrire une fonction qui renvoie à quelque chose d'un ostream qui est passé en, et de renvoyer le flux, comme ceci:

std::ostream& MyPrint(int val, std::ostream* out) {
  *out << val;
  return *out;
}

int main(int argc, char** argv){
    std::cout << "Value: " << MyPrint(12, &std::cout) << std::endl;
    return 0;
}

Il serait pratique de pouvoir imprimer la valeur de ce genre et incorporer l'appel de la fonction dans l'opérateur de sortie de la chaîne, comme je l'ai fait dans main().

Ça ne fonctionne pas, cependant, et imprime ce:

$ ./a.out
12Value: 0x6013a8

La sortie désirée serait celui-ci:

Value: 12

Comment puis-je résoudre ce problème? Dois-je définir un operator<< à la place?

Mise à JOUR: a Précisé que la sortie désirée serait.

UPDATE2: Certaines personnes ne comprenaient pas pourquoi j'ai l'impression d'un nombre comme ça, à l'aide d'une fonction au lieu de l'imprimer directement. C'est un exemple simplifié, et, en réalité, la fonction imprime un objet complexe, plutôt que d'un int.

  • Pourquoi êtes-vous le passage du courant par l'intermédiaire d'un pointeur plutôt que par le biais de areference?
  • Peut-être qu'il est lire la Google guide de style, et acheté dans ce "ne pas utiliser de non-const paramètres de référence" de la mode qui va autour.
  • Aussi, quel est le point de ne pas faire cout << "Value: " << 12; comme @Neil recommande? Qui semble être la plus simple solution.
  • et @onebyone: Oui, j'ai commencé à utiliser google conventions de style.
  • Juste l'impression de '12' était juste un exemple jouet. En réalité, je ne passe pas un int, mais plus compliqué structure de données qui doit être imprimé sur le flux.
  • Veuillez cesser d'utiliser le google conventions. Si vous avez besoin de raisons, il y avait une grande discussion à ce sujet sur le comp.lang.c++.modérateur de groupe de discussion usenet.
  • Re: UPDATE2 -- À l'impression de cet objet complexe de la vôtre, pourquoi ne pas définir une nouvelle surchargé std::operator<< pour ce type, comme à chaque classe normale utilise?

InformationsquelleAutor Frank | 2009-07-06