Я также хотел, чтобы обернуть Printf и нашел полезный ответ здесь:
How to pass variable number of arguments to printf/sprintf
Я не был заинтересован в производительности (я уверен, что этот кусок кода может быть улучшена в ряде способы, не стесняйтесь сделать это :)), это для общего debugprinting только поэтому я сделал это:
//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;
}
который я тогда можно использовать, как это
Point2d p;
cout << osprintf("Point2d: (%3i, %3i)", p.x, p.y);
instead of for example:
cout << "Point2d: (" << setw(3) << p.x << ", " << p.y << ")";
C++ ostreams в некоторых аспектах прекрасны, но практически становятся ужасающими, если вы хотите напечатать что-то вроде этого с помощью небольших строк, таких как скобки, двоеточия и запятые, вставленные между цифрами.
Возможный дубликат [Переслать вызов вариационной функции в C] (http://stackoverflow.com/questions/150543/forward-an-invocation-of-a-variadic-function-in-c) –
Ну на этом решении было использовано vprintf, и здесь это не так. –