The example below shows the standard way to throw an exception in C++. Use of setNote and add methods is not strictly required; however, they do provide information that may be helpful in debugging or error reporting.
int32_t
ExceptionTest::Fib_impl::getFib_impl (
/*in*/ int32_t n,
/*in*/ int32_t max_depth,
/*in*/ int32_t max_value,
/*in*/ int32_t depth )
// throws:
// ::ExceptionTest::FibException
// ::ExceptionTest::NegativeValueException
// ::sidl::RuntimeException
{
// DO-NOT-DELETE splicer.begin(ExceptionTest.Fib.getFib)
if (n < 0) {
UCXX ::ExceptionTest::NegativeValueException ex =
UCXX ::ExceptionTest::NegativeValueException::_create();
ex.setNote("n negative");
ex.add(__FILE__, __LINE__, "ExceptionTest::Fib_impl::getFib");
throw ex;
} else if (depth > max_depth) {
UCXX ::ExceptionTest::TooDeepException ex =
UCXX ::ExceptionTest::TooDeepException::_create();
ex.setNote("too deep");
ex.add(__FILE__, __LINE__, "ExceptionTest::Fib_impl::getFib");
throw ex;
} else if (n == 0) {
return 1;
} else if (n == 1) {
return 1;
} else {
int32_t a = getFib(n-1, max_depth, max_value, depth+1);
int32_t b = getFib(n-2, max_depth, max_value, depth+1);
if (a + b > max_value) {
UCXX ::ExceptionTest::TooBigException ex =
UCXX ::ExceptionTest::TooBigException::_create();
ex.setNote("too big");
ex.add(__FILE__, __LINE__, "ExceptionTest::Fib_impl::getFib");
throw ex;
}
return a + b;
}
// DO-NOT-DELETE splicer.end(ExceptionTest.Fib.getFib)
}