Tôi cũng muốn kết thúc printf và tìm thấy một câu trả lời hữu ích ở đây:
Cách truyền số đối số biến cho printf / sprintf
Tôi hoàn toàn không quan tâm đến hiệu suất (tôi chắc chắn rằng đoạn mã này có thể được cải thiện theo một số cách, hãy làm như vậy :)), điều này chỉ dành cho gỡ lỗi chung nên tôi đã làm điều này:
//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;
}
mà sau đó tôi có thể sử dụng như thế này
Point2d p;
cout << osprintf("Point2d: (%3i, %3i)", p.x, p.y);
instead of for example:
cout << "Point2d: ( " << setw(3) << p.x << ", " << p.y << " )";
Các dòng lệnh c ++ đẹp ở một số khía cạnh, nhưng thực tế nó trở nên kinh khủng nếu bạn muốn in thứ gì đó như thế này với một số chuỗi nhỏ như dấu ngoặc đơn, dấu hai chấm và dấu phẩy được chèn giữa các số.