Avatar ·

Formateo de cadenas en C++ como en sprintf: formas modernas y seguras

¡Hola! Llevo poco tiempo programando en C++ y me encontré con el problema del formateo de cadenas. Antes en C usaba sprintf:
char buffer[256];
sprintf(buffer, "¡Hola, %s! Tienes %d años.", name.c_str(), age);
Pero en C++ con std::string resulta incómodo: hay que usar c_str(), el buffer tiene tamaño fijo, y sprintf no es seguro (puede desbordar el buffer). Probé snprintf — es mejor, pero sigue siendo engorroso. Sé que existe std::stringstream, pero es demasiado verboso:
std::stringstream ss;
ss << "¡Hola, " << name << "! Tienes " << age << " años.";
std::string result = ss.str();
Esto está bien para casos simples, pero cuando hay que formatear números (ancho de campo, precisión, hex), escribir pseudocódigo se vuelve tedioso. Por ejemplo, ¿cómo mostrar