Boost logo

Boost :

From: Glew, Andy (andy.glew_at_[hidden])
Date: 2002-03-20 17:23:02


> There are two reasons to use a return code approach: the
> error is benign and needing to know about it is rare.

These are the following basic error handling techniques:
(1) exceptions
        - errors are rare, and should not be ignored
        - performance loss when errors are handled okay
                (since most C++'s do exceptions slowly)
(2) return code
        - errors are common
        - performance loss on error not acceptable
(3) ignore

All can be written in terms of each other,
except for the performance issues:

foo_with_exception_error_handling() {
        if( foo_with_return_error_handling() ) {
                throw "foo error"
        }
}

bool
foo_with_return_error_handling() {
        try{
                foo_with_exception_error_handling();
                return false;
        }
        catch(...) {
                return true;
        }
}

foo_ignoring_errors() {
        .. is trivial ..
}

It is easier to implement foo_with_return_error_handling
in terms of foo_with_exception_error_handling
than vice versa.
I have a standard macro in my library to do so

#define TRY(type,call) {type ret; try { ret = call; } catch(...) {}; ret}

the above uses GCC/G++'s statement expressions.

Implementing foo_with_exception_error_handling()
in terms of foo_with_return_error_handling requires
more idiosyncratic knowledge - what's the error code?

---
Surely it should be possble to create a library that has
both flavours, in a generic manner?

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk