Quand je veux faire une représentation textuelle d'un objet disponible, je l'habitude d'écrire un (public
) méthode print()
qui prend un std::ostream&
. Cela me facilite le test unitaire et expose les données privées sans avoir besoin de faire friend
s.
void Date::print(std::ostream& s) const
{
s << yyyy << "-" << mm << "-" << dd;
}
Cela rend l'écriture du flux insertion operator que Jesus Ramos suggested agréable et simple:
std::ostream& operator<<(std::ostream& s, const Date& d)
{
d.print(s);
return s;
}
Et si vous (vraiment) voulez un std::string()
operator
, alors c'est trivial:
Date::operator std::string() const
{
std::ostringstream oss;
print(oss);
return oss.str();
}
thx Jésus, laissez-moi l'essayer – itcplpl
Voulez-vous dire 'ostream' ici? 'std :: stream' est nouveau pour moi. –
@Steve merci, doit avoir fait une faute de frappe quelque chose. –