También quería ajustar printf y encontré una respuesta útil aquí:
Cómo pasar un número variable de argumentos a printf / sprintf
No estaba interesado en absoluto en el rendimiento (estoy seguro de que este fragmento de código se puede mejorar de varias maneras, no dude en hacerlo :)), esto es solo para depuración general, así que hice esto:
//Helper function
std::string osprintf(const char *fmt, ...)
{
va_list args;
char buf[1000];
va_start(args, fmt);
vsnprintf(buf, sizeof(buf), fmt, args );
va_end(args);
return buf;
}
que luego puedo usar así
Point2d p;
cout << osprintf("Point2d: (%3i, %3i)", p.x, p.y);
instead of for example:
cout << "Point2d: ( " << setw(3) << p.x << ", " << p.y << " )";
Los ostreams de c ++ son hermosos en algunos aspectos, pero prácticamente se vuelven horribles si desea imprimir algo como esto con algunas cadenas pequeñas como paréntesis, dos puntos y comas insertadas entre los números.