我正在尝试实现第一个计算器。我的旧代码(开关盒):
enum arithmetic_type{
add = 0,
subtract = 1,
multiply = 2,
divide = 3
};
inline void calculate(double &var, double value, arithmetic_type type){
switch(type)
{
case add : var += value;break;
case subtract : var -= value;break;
case multiply : var *= value;break;
case divide : var /= value;break;
}
}
我看到了“指向函数定义的指针”,然后有了一个新想法:改为使用单独的函数。现在我的代码看起来像:
typedef void(*arithmetic_type)(double &var, double value); //template
inline void add(double &var, double value){var+=value;} //components
inline void subtract(double &var, double value){var-=value;}
inline void multiply(double &var, double value){var*=value;}
inline void divide(double &var, double value){var/=value;}
////////////////////////////////////////////////////////////////
struct VAR
{
double var_value;
arithmetic_type operator_type;
inline void calculate(double value){operator_type(var_value, value);}
};
我发现它比 switch-case 简单得多。更重要的是,我将添加一些其他运算符,例如关系运算符......所以我认为这个新的解决方案比旧的 switch-case 解决方案更清晰,也更方便。:)
但我仍然怀疑代码速度和性能。它执行得更快吗?