ฉันต้องการห่อ 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 ++ ostream มีความสวยงามในบางแง่มุม แต่ในทางปฏิบัติแล้วจะกลายเป็นเรื่องที่น่ากลัวหากคุณต้องการพิมพ์สิ่งนี้โดยใช้สตริงเล็ก ๆ เช่นวงเล็บเครื่องหมายทวิภาคและเครื่องหมายจุลภาคแทรกระหว่างตัวเลข