Вот в D есть удобная функция format.
А в крестах на выбор три варианта: либо си-портянка, либо sstream-портянка, либо бустопортянка.
Сделал норм:
#include <boost/format.hpp>
#include <string>
std::string format_(boost::format &fmt)
{ return fmt.str(); }
template <typename A, typename ... Args>
std::string format_(boost::format &fmt, const A& a, Args...args)
{ return format_(fmt % a, args...); }
template <typename ... Args>
std::string format(const std::string &fmt, Args...args)
{
boost::format fmt_(fmt);
return format_(fmt_, args...);
}
Usage:
std::string a = format("[%d, '%s', 0x%x]", 1, ":3", 359);