首页 > 解决方案 > 减少两个相似的函数以避免重复

问题描述

我有一个项目。在那一个中​​有非常相似的函数,因为差异只是计算方式。一方面我们使用平均计算,另一方面我们使用中位数计算。这些函数使用相同的参数和相同的代码。

这是区别:

find_median(some parameters)
{
    /* some code */
    best_windows_median(same parameters);
    /* some code */
}

find_average(some parameters)
{
    /* some code */
    best_windows_average(some parameters);
    /* some code */
}

2-3个函数也是一样的。如何将 2 个函数重新组合为一个,但保留使用中位数或平均值的选择?

标签: c

解决方案


有几种方法可以实现这一点,包括传递一个值来切换使用哪个计算,以及传递一个函数指针(如果感兴趣的话,第二个是依赖倒置的本质)。

所以要么:

find_average(data parameters, avg_type) {
    same code
    switch (avg_type) {
    case AVG_MEAN:
        best_windows_mean(data parameters);
        break;
    case AVG_MEDIAN:
        best_windows_median(data parameters);
        break;
    case AVG_MODE:
        ...
    default:
        report unrecognised option;
    }
    same code;
}

或者

find_average(data parameters, best_windows_function) {
    same code;
    best_windows_function(data parameters);
    same code;
}

使用哪一个取决于您是否对函数指针感到满意,以及您最喜欢哪一个,真的。


推荐阅读