aboutsummaryrefslogtreecommitdiff
path: root/include/salticidae/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/salticidae/util.h')
-rw-r--r--include/salticidae/util.h20
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(); }