ke_jin@[EMAIL PROTECTED]
wrote:
>>>> Just write your own wrapper function that calls non_existent(),
catches
>>>> the exceptions you want, and returns different error codes for
different
>>>> exceptions. Once you've done that, you can reuse that code
everywhere
>>>> without having to write lots of catch() blocks.
>>> Then, you would end up with exactly same "lots of" switch/case blocks
>>> :).
>> Not if you design the error codes right, or make predicate functions
>> that you can reuse that translate the error code to a boolean value.
>>
>
> As long as your wrapper "returns different error codes for different
> exceptions".
You're missing my point.
> Here is an example:
>
> original code with many try/catch:
>
> try {
> ....
> }
> catch(exception a) {
> handle_exception_a(...);
> }
> catch(exception b) {
> handle_exception_b(...);
> }
> ...
>
> wrapper that "returns different error codes for different exceptions":
> ...
>
> int wrapper() {
> ...
> try {
> ....
> }
> catch(exception a) {
> return error_code_a;
> }
> catch(exception b) {
> return error_code_b;
> }
> ...
> }
>
> Use of this wrapper:
>
> ...
> switch(wrapper()) {
> case error_code_a: handle error a; break;
> case error_code_b: handle error b; break;
> ...
> }
Or:
bool error_codes_i_care_about(error code e) {
switch (e) {
case error_code_a:
case error_code_c:
return true;
default:
return false;
}
}
error_code wrapper(CORBA::Object_ptr obj) {
try {
....
}
catch(exception a) {
return error_code_a;
}
catch(exception b) {
return error_code_b;
}
...
}
bool wrapper(CORBA::Object_ptr obj, bool (*predicate)(errror_code)) {
return predicate(wrapper(obj));
}
...
if (wrapper(obj, error_codes_i_care_about)) {
// handle errors I care about
else
// do something else
...
--
Jon Biggar
Floorboard Software
jon@[EMAIL PROTECTED]


|