diff options
author | crupest <crupest@outlook.com> | 2018-09-01 23:28:28 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-09-01 23:28:28 +0800 |
commit | 956a401f9c955f26b7e661dc80f76bfc43fc4124 (patch) | |
tree | 8af088933c7bc08942478daddd55c92de8668359 /CruUI/exception.h | |
download | cru-956a401f9c955f26b7e661dc80f76bfc43fc4124.tar.gz cru-956a401f9c955f26b7e661dc80f76bfc43fc4124.tar.bz2 cru-956a401f9c955f26b7e661dc80f76bfc43fc4124.zip |
Initial commit
Diffstat (limited to 'CruUI/exception.h')
-rw-r--r-- | CruUI/exception.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/CruUI/exception.h b/CruUI/exception.h new file mode 100644 index 00000000..c7d6f996 --- /dev/null +++ b/CruUI/exception.h @@ -0,0 +1,42 @@ +#pragma once + +#include "system_headers.h" +#include <optional> + +#include "base.h" + + +namespace cru { + class HResultError : public std::runtime_error + { + public: + explicit HResultError(HRESULT h_result); + HResultError(HRESULT h_result, const std::string& message); + HResultError(const HResultError& other) = default; + HResultError(HResultError&& other) = default; + HResultError& operator=(const HResultError& other) = default; + HResultError& operator=(HResultError&& other) = default; + ~HResultError() override = default; + + HRESULT GetHResult() const + { + return h_result_; + } + + private: + static std::string MakeMessage(HRESULT h_result, std::optional<std::string> message); + + private: + HRESULT h_result_; + }; + + inline void ThrowIfFailed(const HRESULT h_result) { + if (FAILED(h_result)) + throw HResultError(h_result); + } + + inline void ThrowIfFailed(const HRESULT h_result, const std::string& message) { + if (FAILED(h_result)) + throw HResultError(h_result, message); + } +} |