Re: Call order
On Jul 18, 11:52 am, p...@informatimago.com (Pascal J. Bourguignon)
wrote:
sreeni <sreeni.h...@gmail.com> writes:
On Jul 18, 12:18 pm, p...@informatimago.com (Pascal J. Bourguignon)
wrote:
Is it possible to do something like if(base::method_3()
fails) then base::method_1() etc..
Of course. Perhaps you should start to learn C++ programming?
Here all methods will be called whether required or not right?
Only when they don't fail. When a method fails, it should
throw an exception,
That depends on how it fails. In a lot of cases, the most
appropriate method of reporting a failure is a return code (and
in some cases, it is to abort---one size doesn't fit all).
If the functions return something which converts to true in case
of success, and false in case of failure, and you don't need to
capture the cause of the failure, then you can write something
like:
method_1() && method_2() && method_3() ;
A very typical C++ idiom, I would think.
and then it's the next handler (try/catch) that will take
over, not the following statements.
On the other hand, if you want to run the following methods
only when the method fails, you can write:
try{
base::method_3();}catch(...){
// it failed.
base::method_1();
base::method_2();
throw; // or not
}
Which is a perfect example of how not to write C++. If there is
any chance that the immediate caller will do something in case
of an error, you should report it by a return code (except, of
course, in cases where you can't, like constructors). In which
case, the above could be written:
method_3() || (method_1(), method_2()) ;
Or in the more likely case where he wants to stop with the first
success:
method_3() || method_1() || method_2() ;
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34