Это один из тех неудобных вопросов, когда трудно придумать что-нибудь разумное, чтобы надеть заголовок. Может быть, я могу переименуйте ретроспективно ...Удалить дублирование в C++ 11 try catch pattern
Я имею дело со следующим кодом:
static FinalClass* final_class(PyObject* o) {/*...*/}
template< F0 f >
static PyObject* handler(PyObject* o, PyObject*)
{
try
{
Object result{ (final_class(o) ->* f)() };
return new_reference_to(result.ptr());
}
catch(Exception &)
{
DBG_LINE("! ! ! Exception Python calling new-style-class handler ! ! !");
return 0;
}
}
template< F1 f >
static PyObject* handler(PyObject* o, PyObject* _a)
{
try
{
Object result{ (final_class(o) ->* f)(Tuple{_a}) };
return new_reference_to(result.ptr());
}
catch(Exception &)
{
DBG_LINE("! ! ! Exception Python calling new-style-class handler ! ! !");
return 0;
}
}
template< F2 f >
static PyObject* handler(PyObject* o, PyObject* _a, PyObject* _k)
{
try
{
Object result{ (final_class(o) ->* f)(Tuple{_a}, Dict{_k}) };
return new_reference_to(result.ptr());
}
catch(Exception &)
{
DBG_LINE("! ! ! Exception Python calling new-style-class handler ! ! !");
return 0;
}
}
Как видно, такая же картина происходит в каждом из трех случаев.
Также в третьем случае сигнатура функции имеет дополнительный параметр, хотя эксперименты позволяют мне добавить фиктивный параметр в первые два случая, если это необходимо.
Я не вижу никакого способа абстрагирования механизма, не используя # define-s.
Есть ли что-нибудь, что нужно сделать?
Возможный дубликат [Возможно ли писать/переносить компоненты обработки исключений (try, catch) в разных классах?] (Http://stackoverflow.com/questions/25579323/is-it-possibe-to -write-wrap-the-exception-handling-componentetstry-catch-in-diffe) –
Не забывайте о макросах. – Peter