Wie kann ich ein sich wiederholendes try catch-Muster in C ++ abstrahieren?

Ich habe ein Muster, das sich für mehrere Elementfunktionen wiederholt und so aussieht:

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 reinen virtuellen abstrakten Schnittstelle, für diemyClass und_original sind konkrete Implementierungen.

Ich mag es nicht, dass dieses Muster im Code wiederholt wird und ich möchte einen Weg finden, um das wiederholte @ zu eliminieretry / catch Muster und Code als eine einzige Abstraktion, aber ich kann mir keine gute Möglichkeit vorstellen, dies in C ++ ohne Makros zu tun. Ich würde denken, dass es einen Weg mit Vorlagen gibt, dies besser zu machen.

Bitte schlagen Sie eine saubere Methode zur Umgestaltung dieses Codes vor, um das wiederholte Muster zu abstrahieren.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage