VirtualBox

source: vbox/trunk/include/iprt/cpp/exception.h@ 86716

Last change on this file since 86716 was 84407, checked in by vboxsync, 5 years ago

include/iprt: VC++ 19.0 adjustments. bugref:8489

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.6 KB
Line 
1/** @file
2 * IPRT - C++ Base Exceptions.
3 */
4
5/*
6 * Copyright (C) 2006-2020 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef IPRT_INCLUDED_cpp_exception_h
27#define IPRT_INCLUDED_cpp_exception_h
28#ifndef RT_WITHOUT_PRAGMA_ONCE
29# pragma once
30#endif
31
32#include <iprt/cpp/ministring.h>
33#include <exception>
34
35#if RT_MSC_PREREQ(RT_MSC_VER_VC140)
36# pragma warning(push)
37# pragma warning(disable:4275) /* non dll-interface class 'std::exception' used as base for dll-interface class 'RTCError' */
38#endif
39
40
41/** @defgroup grp_rt_cpp_exceptions C++ Exceptions
42 * @ingroup grp_rt_cpp
43 * @{
44 */
45
46/**
47 * Base exception class for IPRT, derived from std::exception.
48 * The XML exceptions are based on this.
49 */
50class RT_DECL_CLASS RTCError
51 : public std::exception
52{
53public:
54
55 RTCError(const char *pszMessage)
56 : m_strMsg(pszMessage)
57 {
58 }
59
60 RTCError(const RTCString &a_rstrMessage)
61 : m_strMsg(a_rstrMessage)
62 {
63 }
64
65 RTCError(const RTCError &a_rSrc)
66 : std::exception(a_rSrc),
67 m_strMsg(a_rSrc.what())
68 {
69 }
70
71 virtual ~RTCError() throw()
72 {
73 }
74
75 void operator=(const RTCError &a_rSrc)
76 {
77 m_strMsg = a_rSrc.what();
78 }
79
80 void setWhat(const char *a_pszMessage)
81 {
82 m_strMsg = a_pszMessage;
83 }
84
85 virtual const char *what() const throw()
86 {
87 return m_strMsg.c_str();
88 }
89
90private:
91 /**
92 * Hidden default constructor making sure that the extended one above is
93 * always used.
94 */
95 RTCError();
96
97protected:
98 /** The exception message. */
99 RTCString m_strMsg;
100};
101
102/** @} */
103
104#if RT_MSC_PREREQ(RT_MSC_VER_VC140)
105# pragma warning(pop)
106#endif
107#endif /* !IPRT_INCLUDED_cpp_exception_h */
108
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette