У меня есть шаблон, который повторяется для нескольких функций-членов, которые выглядят следующим образом:
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();
}
}
Где абстрактные с помощью n - это методы чистого виртуального абстрактного интерфейса, для которых myClass и _original являются конкретными реализациями.
Мне не нравится, что этот шаблон повторяется в коде и хотел бы найти способ устранить повторяющийся шаблон try/catch и код как одну абстракцию, но я не могу придумать хороший способ сделать это в С++ без макросов. Я бы подумал, что с шаблонами есть способ сделать это лучше.
Пожалуйста, предложите чистый способ рефакторинга этого кода, чтобы абстрагировать повторяющийся шаблон.