mekakic
2011-08-04, 14:34:37
Ich hab gerade ein kleines Problem und kein C++0x ... bin da noch nicht sicher aber nach der Beschreibung hört sich das auf Anhieb etwas nach den Lamda functions in C++0x an.
Denn zur Anbindung an ein remote Interface habe ich einen Block Standardcode: eine Mischung aus Loggings, Loops und try/catch Blöcken mit Behandlung für einen großen Satz von Standard-Exceptions gefolgt von ein paar User Exceptions. In diesem try-Block ist häufig nur der eigentliche Interface Call anders und der Code drum rum zur Absicherung oft identisch.
some_interface_impl::foo()
{
//logging
//some flow control
while(success)
{
try
{
remote_interface_p->foocall_q(parameter_r, parameter t, ... );
}
catch( EXCEPTION_A )
{
/* do this */
}
catch( EXCEPTION_Z )
{
/* do that */
}
/**/
catch( CUSTOM_EXCEPTION_A )
{
/* do that */
}
/**/
catch( CUSTOM_EXCEPTION_B )
{
/* do that */
}
/* more flow control */
}
}
Gibt es unter C++ eine elegante Methode das zu kapseln anstatt sich für >20 Funktionen einen copy/paste-Orgie zu veranstalten? Ich habe fast 200 Zeilen, die dann immer wieder kopiert werden, um einen call auf ein remote Interface zu kapseln. Irgendwie würde ich gerne den Funktions call da rausziehen und diese ganze Funktionalität generisch mit einem Call machen, der dann nur noch den Interface Parameter als Aufruf bekommt.
Das zweite Problem, dann noch richtig zu reagieren, wenn das Interface User Exceptions hat, auf die dann reagiert werden muß. Geht das mit C++ brauchbar?
Denn zur Anbindung an ein remote Interface habe ich einen Block Standardcode: eine Mischung aus Loggings, Loops und try/catch Blöcken mit Behandlung für einen großen Satz von Standard-Exceptions gefolgt von ein paar User Exceptions. In diesem try-Block ist häufig nur der eigentliche Interface Call anders und der Code drum rum zur Absicherung oft identisch.
some_interface_impl::foo()
{
//logging
//some flow control
while(success)
{
try
{
remote_interface_p->foocall_q(parameter_r, parameter t, ... );
}
catch( EXCEPTION_A )
{
/* do this */
}
catch( EXCEPTION_Z )
{
/* do that */
}
/**/
catch( CUSTOM_EXCEPTION_A )
{
/* do that */
}
/**/
catch( CUSTOM_EXCEPTION_B )
{
/* do that */
}
/* more flow control */
}
}
Gibt es unter C++ eine elegante Methode das zu kapseln anstatt sich für >20 Funktionen einen copy/paste-Orgie zu veranstalten? Ich habe fast 200 Zeilen, die dann immer wieder kopiert werden, um einen call auf ein remote Interface zu kapseln. Irgendwie würde ich gerne den Funktions call da rausziehen und diese ganze Funktionalität generisch mit einem Call machen, der dann nur noch den Interface Parameter als Aufruf bekommt.
Das zweite Problem, dann noch richtig zu reagieren, wenn das Interface User Exceptions hat, auf die dann reagiert werden muß. Geht das mit C++ brauchbar?