fmt.h 970 Bytes
Newer Older
Nianchen Deng's avatar
sync    
Nianchen Deng committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <string>

namespace utils::common {
    template <typename... Args> static std::string fmt(const std::string &format, Args... args) {
        auto size_buf = std::snprintf(nullptr, 0, format.c_str(), args...) + 1;
        std::unique_ptr<char[]> buf(new (std::nothrow) char[size_buf]);

        if (!buf)
            return std::string("");

        std::snprintf(buf.get(), size_buf, format.c_str(), args...);
        return std::string(buf.get(), buf.get() + size_buf - 1);
    }
    template <typename... Args> static std::wstring fmt(const std::wstring &format, Args... args) {
        auto size_buf = std::snprintf(nullptr, 0, format.c_str(), args...) + 1;
        std::unique_ptr<char[]> buf(new (std::nothrow) char[size_buf]);

        if (!buf)
            return std::wstring("");

        std::snprintf(buf.get(), size_buf, format.c_str(), args...);
        return std::wstring(buf.get(), buf.get() + size_buf - 1);
    }
} // namespace utils::common