00001 // general_exception.hpp 00002 00003 // Copyright (C) 2004 Steven Weiß (steven11@gmx.de) 00004 // 00005 // Permission to copy, use, sell and distribute this software is granted 00006 // provided this copyright notice appears in all copies. 00007 // Permission to modify the code and to distribute modified code is granted 00008 // provided this copyright notice appears in all copies, and a notice 00009 // that the code was modified is included with the copyright notice. 00010 // 00011 // This software is provided "as is" without express or implied warranty, 00012 // and with no claim as to its suitability for any purpose. 00013 00014 00015 #pragma once 00016 #include <background_wnd/detail/include.hpp> 00017 00018 00019 /* 00020 The exception-hierarchy presented here is serveral layers: 00021 - To catch all exceptions of background_wnd and the painters catch background_wnd_exception 00022 - To catch all exceptions of a specific class catch general_exception_of_type<class_name> 00023 - To catch a specific exception of a class catch general_exception<class_name, exception_number> 00024 (most likely this will be typedef'ed in the class) 00025 */ 00026 00027 namespace win32 { namespace gui { 00028 namespace bg_wnd { 00029 00033 struct background_wnd_exception : std::exception 00034 { 00035 background_wnd_exception() : std::exception("Exception caused by background_wnd or a painter") 00036 {} 00037 }; 00038 00039 00047 template<class T> 00048 class general_exception_of_type : public background_wnd_exception 00049 { 00050 const T& obj_; 00051 public: 00052 typedef T class_type; 00053 00054 general_exception_of_type(const T& obj) : obj_(obj) 00055 {} 00056 00057 const T& get_object() const 00058 { 00059 return obj_; 00060 } 00061 }; 00062 00071 template <class T, int num> 00072 struct general_exception : general_exception_of_type<T> 00073 { 00074 general_exception(const T& obj) : general_exception_of_type<T> (obj) 00075 {} 00076 }; 00077 00078 } // namespace bg_wnd 00079 } } // namespace win32::gui
|
by Steven Weiss. You can contact me at steven11@gmx.de. |