2016-09-12 2 views
-1

Je cherche un moyen d'utiliser un ostream avec ma classe de chaînes personnalisée et de surcharger l'opérateur < < pour diffuser dans le tampon que je peux ensuite vider à n'importe où je veux (dans Je suis relativement nouveau dans le fonctionnement interne d'iostream, mais d'après ce que j'ai compris, la méthode que j'ai utilisée pour faire de std :: stringbuf une base de ma strings personnalisée ne serait pas une nouveauté dans le fonctionnement interne de iostream. fonctionne car le stringbuf gère la chaîne std :: string.En utilisant ma propre classe String avec l'opérateur <<

en substance, je veux pouvoir le faire (ou similaire):

MyStringClass string 
MyOutput << "hello" << string << "World" << std::endl; 

Où MyOutput peut être changé pour imprimer n'importe où je veux.

Merci.

Répondre

0

Pas de problème. Définissez votre classe et, dans sa définition, ajoutez un ostream& operator<<(const String&);.

À l'intérieur de cet opérateur, vous pouvez coder la manipulation que vous voulez (regardez std :: string pour l'inspiration)

+0

est-ce si simple? mais l'ostream que ma chaîne est en sortie, n'est-ce pas traiter avec std :: strings? ou suis-je simplement en train d'ignorer cela et de faire l'impression dans la définition de l'opérateur? merci –

+0

'ostream' est le type de' cout'; il n'a aucune relation avec std :: string. Ma déclaration vous permettrait d'utiliser 'cout << yourstring' mais vous n'êtes pas obligé d'utiliser cout; Utilisez n'importe quelle destination que vous voulez. – Aganju

+0

@LukeBourne Dans votre fonction '' ', vous devez sortir un autre type, tel que' std :: string', qui a déjà une méthode de sortie définie. – Barmar