Ich habe ein Muster, das für mehrere Member-Funktionen wiederholt, die wie folgt aussieht:Wie kann ich abstrakt ein sich wiederholendes Try-Catch-Muster in C out ++
int myClass::abstract_one(int sig1)
{
try {
return _original->abstract_one(sig1);
} catch (std::exception& err) {
handleException(err);
} catch (...) {
handleException();
}
}
bool myClass::abstract_two(int sig2)
{
try {
return _original->abstract_two(sig2);
} catch (std::exception& err) {
handleException(err);
} catch (...) {
handleException();
}
}
[...]
int myClass::abstract_n(bool sig3a, short sig3b)
{
try {
return _original->abstract_n(sig3a, sig3b);
} catch (std::exception& err) {
handleException(err);
} catch (...) {
handleException();
}
}
Wo abstrakt eins bis n sind Methoden einer rein virtuellen abstrakte Schnittstelle wofür myClass und _original konkrete Implementierungen sind.
Ich mag es nicht, dass sich dieses Muster im Code wiederholt und möchte einen Weg finden, das sich wiederholende Versuchs-/Fangmuster und Code als eine einzelne Abstraktion zu eliminieren, aber ich kann mir keinen guten Weg vorstellen das in C++ ohne Makros. Ich würde denken, dass es einen Weg mit Vorlagen gibt, um das besser zu machen.
Bitte schlagen Sie eine saubere Möglichkeit vor, diesen Code zu refaktorieren, um das wiederholte Muster zu abstrahieren.
Makros sind wahrscheinlich Ihre beste Wette, obwohl es ein bisschen beunruhigend ist, dass Sie es oft versuchen/werfen. – GManNickG
@GMan, müssen Sie es möglicherweise für eine Bibliothek, die eine C-Schnittstelle oder Callbacks mit einer C-Bibliothek registriert hat. –
Haben Sie sich noch eine Lisp-Variante angesehen? Lisp ist bestrebt, strukturelle Probleme zu vermeiden. –