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库;二者格式兼容;


版权声明:本文为wangxiyuan1017原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。