1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Catching and Throwing Exceptions in C++</TITLE>
<META NAME="description" CONTENT="Catching and Throwing Exceptions in C++">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="users_guide.css">
<LINK REL="next" HREF="node127.html">
<LINK REL="previous" HREF="node125.html">
<LINK REL="up" HREF="node120.html">
<LINK REL="next" HREF="node127.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2597"
HREF="node127.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2591"
HREF="node120.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2585"
HREF="node125.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2593"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2595"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2598"
HREF="node127.html">Invoking Babel to generate</A>
<B> Up:</B> <A NAME="tex2html2592"
HREF="node120.html">C++ Bindings</A>
<B> Previous:</B> <A NAME="tex2html2586"
HREF="node125.html">Calling Methods from C++</A>
<B> <A NAME="tex2html2594"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2596"
HREF="node317.html">Index</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION03260000000000000000"></A>
<A NAME="6638"></A>
<BR>
Catching and Throwing Exceptions in C++
</H1>
Adapted from the Babel regression tests, the following is an example of a
package called ExceptionTest that has a class named Fib with a method declared
in SIDL as follows:
<P>
<BR>
<PRE CLASS="verbatim">int getFib(in int n, in int max_depth, in int max_value, in int depth)
throws NegativeValueException, FibException;
</I></PRE></td></tr></table></blockquote>
<P>
The corresponding C++ code fragment to use this method is:
<P>
<BR>
<PRE CLASS="verbatim">ExceptionTest::Fib fib = ExceptionTest::Fib::_create();
try {
int result = fib.getFib( 4, 100, 32000, 0 );
cout << "Result of fib.getFib() = " << result << endl;
} catch ( ExceptionTest::NegativeValueException e ) {
// ...
} catch ( ExceptionTest::FibException e ) {
// ...
}
</PRE></td></tr></table></blockquote>
<P>
This example shows the standard way to throw an exception in C++. You
are not strictly required to call the <TT>setNote</TT> and <TT>add</TT>
methods; however, these methods provide information that may be
helpful in debugging or error reporting.
<P>
<BR>
<PRE CLASS="verbatim">int32_t
ExceptionTest::Fib_impl::getFib (
/*in*/ int32_t n, /*in*/ int32_t max_depth,
/*in*/ int32_t max_value, /*in*/ int32_t depth )
throw (
::ExceptionTest::NegativeValueException,
::ExceptionTest::FibException
){
// DO-NOT-DELETE splicer.begin(ExceptionTest.Fib.getFib)
if (n < 0) {
NegativeValueException ex = NegativeValueException::_create();
ex.setNote("n negative");
ex.add(__FILE__, __LINE__, "ExceptionTest::Fib_impl::getFib");
throw ex;
}
// several lines delete
// DO-NOT-DELETE splicer.end(ExceptionTest.Fib.getFib)
}
</PRE></td></tr></table></blockquote>
<P>
<BR><HR>
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>
|