aboutsummaryrefslogtreecommitdiff
path: root/include/salticidae/util.h
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2018-08-28 21:30:03 -0400
committerDeterminant <ted.sybil@gmail.com>2018-08-28 21:30:03 -0400
commit52e051cb6924266003ef21814b5ebaf2b7b45241 (patch)
tree42db678daa02d0665ef9b0f358d39233b57379af /include/salticidae/util.h
parent6de2e6d9ce2ab3d076ac667dc875e8fd71b919fa (diff)
...
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(); }