Я також хотів обернути 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 << " )";
Потоки c ++ в деяких аспектах прекрасні, але практично стають жахливими, якщо ви хочете надрукувати щось подібне за допомогою невеликих рядків, таких як дужки, колонки та коми, вставлені між числами.