diff options
Diffstat (limited to 'include/salticidae/util.h')
-rw-r--r-- | include/salticidae/util.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/include/salticidae/util.h b/include/salticidae/util.h index 39a3683..4e6825a 100644 --- a/include/salticidae/util.h +++ b/include/salticidae/util.h @@ -52,7 +52,25 @@ class SalticidaeError: public std::exception { std::string msg; public: SalticidaeError(); - SalticidaeError(const std::string &fmt, ...); + + template<typename... Args> + SalticidaeError(const std::string &fmt, Args... args) { + int guessed_size = 128; + std::string buff; + for (;;) + { + buff.resize(guessed_size); + int nwrote = snprintf((char *)buff.data(), guessed_size, fmt.c_str(), args...); + if (nwrote < 0 || nwrote == guessed_size) + { + guessed_size <<= 1; + continue; + } + buff.resize(nwrote); + msg = std::move(buff); + break; + } + } operator std::string() const { return msg; } const char *what() const throw() override { return msg.c_str(); } |