Я также хотел обернуть printf и нашел здесь полезный ответ:
Как передать переменное количество аргументов в printf / sprintf
Меня совершенно не интересовала производительность (я уверен, что этот фрагмент кода можно улучшить несколькими способами, не стесняйтесь делать это :)), это только для общей отладочной печати, поэтому я сделал следующее:
//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 << " )";
С ++ ostreams красивы в некоторых аспектах, но на практике они становятся ужасными, если вы хотите напечатать что-то подобное с небольшими строками, такими как круглые скобки, двоеточия и запятые, вставленные между числами.