From 956a401f9c955f26b7e661dc80f76bfc43fc4124 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 1 Sep 2018 23:28:28 +0800 Subject: Initial commit --- CruUI/exception.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 CruUI/exception.h (limited to 'CruUI/exception.h') 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 + +#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 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); + } +} -- cgit v1.2.3