#pragma once #include #include #include #include namespace uct { namespace save { struct Template; } // namespace save namespace utils { template std::string format(const std::string& format, Args ... args) { int size_s = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1; // Extra space for '\0' if (size_s <= 0) { throw std::runtime_error("Error during formatting."); } auto size = static_cast(size_s); std::unique_ptr buf(new char[size]); std::snprintf(buf.get(), size, format.c_str(), args ...); return std::string(buf.get(), buf.get() + size - 1); // We don't want the '\0' inside } std::string format(std::string format, const std::vector& args); std::string format(const save::Template& t); } // namespace utils } // namespace uct