Избегайте дублирования кода, когда отличается только средняя часть функций
У меня есть несколько функций, которые начинаются и заканчиваются одинаково, только средняя часть отличается.
Я знаю, что мог сделать:
int
foo(int bar)
{
intro();
/* stuff that differs */
outro();
}
но мне было интересно, есть ли другой способ, спасающий меня от повторного ввода intro() и outro() во всех функциях.
2 ответа
Во-первых, вы должны прочитать об аспектно-ориентированном программировании. Это относится к вашему запросу.
Во-вторых, вы должны быть довольны тем, какой метод позволит вам избежать дублирования кода. То, что вы показали, не имеет ничего общего с этим.
Одним из способов является использование указателей на функции. void (*function)(void)
это указатель на функцию, которая возвращает void
и не принимает никаких параметров.
int foo(int bar, void (*function)(void))
{
intro();
/* call the function*/
function();
outro();
}
Вы вызываете это, передавая адрес функции, которая имеет прототип
void someFunctionName(void)
,
Отрегулируйте по вкусу, если "вещи, которые отличаются" должны принимать аргументы или возвращать значение.