también quería envolver printf y encontré una respuesta útil aquí:
How to pass variable number of arguments to printf/sprintf
que no era en absoluto interesado en el rendimiento (estoy seguro de que esta pieza de código se puede mejorar en una serie de maneras, sienten libres de hacerlo :)), esto es para debugprinting general solamente 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 pueda usar como esto
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 quieres imprimir algo como esto con algunas cadenas pequeñas como paréntesis, dos puntos y comas insertadas entre los números.
posible duplicado de [Reenviar una invocación de una función variadic en C] (http://stackoverflow.com/questions/150543/forward-an-invocation-of-a-variadic-function-in-c) –
Bien la solución en ese caso estaba usando vprintf, y ese no es el caso aquí. –