【发布时间】:2014-08-12 17:19:20
【问题描述】:
假设在 C 语言中,我有 2 个完全相同的方法,但 1 个添加值,另一个减去它:
void decreaseValue(handle* myData, uint8_t amount)
{
/* Stuff going on */
myData->someAttribute -= amount;
/* Stuff going on */
}
void increaseValue(handle* myData, uint8_t amount)
{
/* Stuff going on */
myData->someAttribute += amount;
/* Stuff going on */
}
除了操作符之外,这两个函数是完全一样的,导致很多行重复的代码,这不是微不足道的。
是否有一种安全、便携、不丑陋的方式来处理这个问题,或者我被 ctrl+c ctrl+v 卡住了?
开关盒的可能性:
typedef enum
{
ADD,
SUBSTRACT
}operator;
void modifyValue(handle* myData, uint8_t amount, operator op)
{
/* Stuff going on */
switch(op){
case ADD:
myData->someAttribute += amount;
break;
case SUBSTRACT:
myData->someAttribute -= amount;
break;
/* Stuff going on */
}
它有效,但感觉没有任何好转。
【问题讨论】:
-
switch - case声明?这需要函数接受一个额外的参数。 -
因为减法与添加负值相同,所以我会考虑以这种方式传递负值,您保留一种方法
-
@meda 你应该把它变成我认为你是对的答案。我可以将 2 个函数合并到 modify(handle* myData, int8_t amount) 中,用户将传递负值,而不必模拟多态性或决定调用哪个函数。