diff options
author | John Ankarström <john@ankarstrom.se> | 2022-07-20 02:24:40 +0200 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2022-07-20 02:24:40 +0200 |
commit | 3d56ea09228ac2989eb8b89c8b69909603d61c3e (patch) | |
tree | 2deef821cae98df8033c11e452ca063a0caa583f | |
parent | 0e8054175d1ba6898830a2df20ea7f6660880f80 (diff) | |
download | EpisodeBrowser-3d56ea09228ac2989eb8b89c8b69909603d61c3e.tar.gz |
Use template instead of Win32Error::twhat.
-rw-r--r-- | c/common.cpp | 24 | ||||
-rw-r--r-- | c/common.h | 6 | ||||
-rw-r--r-- | c/main.cpp | 2 |
3 files changed, 14 insertions, 18 deletions
diff --git a/c/common.cpp b/c/common.cpp index 7981801..ba52f2c 100644 --- a/c/common.cpp +++ b/c/common.cpp @@ -14,36 +14,32 @@ Win32Error::~Win32Error() HeapFree(GetProcessHeap(), 0, m_wszMsg); } -const char* Win32Error::what() const noexcept +template <> +const char* Win32Error::what() const noexcept { if (!m_szMsg) FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, m_dwErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (char*)&m_szMsg, 0, NULL); return m_szMsg; } -const TCHAR* Win32Error::twhat() const noexcept +template <> +const wchar_t* Win32Error::what() const noexcept { -#ifdef UNICODE -#define M m_wszMsg -#else -#define M m_szMsg -#endif - if (!M) - FormatMessage( + if (!m_wszMsg) + FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, m_dwErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (TCHAR*)&M, + MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), + (wchar_t*)&m_wszMsg, 0, NULL); - return M; -#undef M + return m_wszMsg; } /* Library: Wrapper for loading and freeing dynamically linked libraries. */ @@ -17,8 +17,8 @@ struct Win32Error : public std::exception { Win32Error(DWORD dwErr); ~Win32Error(); - virtual const char* what() const noexcept override; - virtual const TCHAR* twhat() const noexcept; + template <typename T = char> const T* what() const noexcept; + private: DWORD m_dwErr; char* m_szMsg = NULL; @@ -69,7 +69,7 @@ inline auto prefer(T... xs) try { return require<F>(xs...); } catch (Win32Error& e) { - EBMessageBox(e.twhat(), TEXT("System Error"), MB_ICONWARNING); + EBMessageBox(e.what<TCHAR>(), TEXT("System Error"), MB_ICONWARNING); return (decltype(F(std::declval<T>()...)))NULL; } } @@ -60,7 +60,7 @@ void OnTerminate() noexcept "Fatal Error", MB_ICONERROR); } catch (Win32Error& e) { std::basic_string<TCHAR> tstr = TEXT("The program was terminated due to a Windows error: "); - tstr += e.twhat(); + tstr += e.what<TCHAR>(); MessageBox(NULL, tstr.c_str(), TEXT("Fatal Error"), MB_ICONERROR); } catch (std::exception& e) { std::string str = "The program was terminated due to an exception: "; |