Avatar ·

Formatage de chaînes en C++ comme sprintf : méthodes modernes et sécurisées

Bonjour ! Je code en C++ depuis peu et j'ai rencontré un problème de formatage de chaînes. Avant, en C, j'utilisais sprintf :
char buffer[256];
sprintf(buffer, "Привет, %s! Тебе %d лет.", name.c_str(), age);
Mais en C++ avec std::string, c'est peu pratique : il faut utiliser c_str(), un buffer de taille fixe, et sprintf n'est pas sûr (risque de débordement). J'ai essayé snprintf — mieux, mais toujours lourd. Je sais qu'il y a std::stringstream, mais il est trop verbeux :
std::stringstream ss;
ss << "Привет, " << name << "! Тебе " << age << " лет.";
std::string result = ss.str();
C'est correct pour des cas simples, mais quand il faut formater des nombres (largeur de champ, précision, hexadécimal), écrire du pseudo-code devient pénible. Par exemple, comment afficher un double avec deux décimales ou un int en hexadécimal ? J'ai entendu parler de boost::format, mais je ne veux pas ajouter Boost dans un petit projet. En C++20, il y a std::format, mais mon compilateur...