Избегайте дублирования кода, когда отличается только средняя часть функций

У меня есть несколько функций, которые начинаются и заканчиваются одинаково, только средняя часть отличается.

Я знаю, что мог сделать:

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),

Отрегулируйте по вкусу, если "вещи, которые отличаются" должны принимать аргументы или возвращать значение.

Другие вопросы по тегам