c - 减少两个相似的函数,避免重复

标签 c

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

这是区别:

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 个函数重新组合为一个,但保留使用 median 或 average 的选择?

最佳答案

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

所以要么:

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;
}

使用哪一个取决于您是否熟悉函数指针以及您最喜欢哪一个。

关于c - 减少两个相似的函数,避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784935/

相关文章:

c - 使用关键字 'struct' 声明结构对象并在 malloc 中

c - C 中的有限递归?

c - Fgets 和 sscanf 不等待输入 C

C - 查找数组中的最大值

python - fseek(fp, 0, SEEK_CUR) 的副作用是什么

c - 在 C 中寻找类似于 assert() 而无需中止的 API/函数

c++ - 可以像在 C 中一样在 C++ 中打印 char 的 ASCII 代码吗?

c - 收到 parent 的信号后如何向 child 的 child 发送信号

c - 有没有办法在不包含 <complex.h> 的情况下声明复数?

c - 使用 ptrace 从结构中检索信息