C'est juste trop verbeux.
Réfléchissez à la construction iostream pour faire ce qui suit (de même pour scanf) :
// nonsense output, just to examplify
fprintf(stderr, "at %p/%s: mean value %.3f of %4d samples\n",
stats, stats->name, stats->mean, stats->sample_count);
Cela nécessiterait quelque chose comme :
std::cerr << "at " << static_cast<void*>(stats) << "/" << stats->name
<< ": mean value " << std::precision(3) << stats->mean
<< " of " << std::width(4) << std::fill(' ') << stats->sample_count
<< " samples " << std::endl;
Le formatage des chaînes de caractères est un cas où l'orientation objet peut, et doit, être évitée en faveur d'un DSL de formatage intégré aux chaînes de caractères. Considérez le langage Lisp format
le formatage de style printf de Python, ou PHP, Bash, Perl, Ruby et leur intrapolation de chaînes de caractères.
iostream
pour ce cas d'utilisation est malavisée, au mieux.