C++ 格式化字符串三种种方式
C-Style格式化字符串
格式参考函数printf的格式
// C-Style
template<typename... Args>
std::string format_string(const std::string& format, Args... args)
{
const auto size = std::snprintf(nullptr, 0, format.c_str(), args...) + 1;
const auto buffer = std::make_unique<char[]>(size);
std::snprintf(buffer.get(), size, format.c_str(), args...);
return std::string(buffer.get(), buffer.get() + size - 1);
}
使用 stringstream格式化字符串
template<typename ... Args>
constexpr std::string stream_format_string(Args&& ... args)
{
std::stringstream msg;
char buff[] = { (msg << args, '\0') ... };
(void)buff;
return msg.str();
}
使用 fmt格式化字符串
C++20后使用std::format函数;之前可以使用fmtlib库;二者格式兼容;