我必须从文件中加载一个双精度数组,将每个元素乘以一个表中的值(不同元素的不同值),对它做一些工作,反转乘法(即除法),然后将数据保存回来提交.
目前,我用两种不同的方法实现乘法和除法过程.现在幕后有一些额外的工作,但除了发生乘法/除法的特定陈述之外,其余代码是相同的.可以想象,通过这种方法,您必须非常小心地进行任何更改.周围的代码并不简单,因此它可以是手动编辑每个方法或将更改从一个方法复制到另一个方法并记住更改*和/运算符的情况.
经过太多的关闭调用之后,我厌倦了这个并且希望创建一个实现公共逻辑和两个包装函数的通用函数,它们将哪个运算符用作参数.
void MultiplyData(double data) { TransformData(data,&(operator *)); } void DivideData(double data) { TransformData(data,&(operator /)); } void TransformData(double data,double (*func)(double op1,double op2)) { /* Do stuff here... */ }
但是,我不能将运算符作为指针传递(这是因为它是本机类型的运算符吗?),所以我尝试使用函数对象.最初我认为在< functional>中乘以和分开算函数会是理想的:
void MultiplyData(double data) { std::multiplies<double> multFunct; TransformData(data,&multFunct); } void DivideData(double data) { std::divides<double> divFunct; TransformData(data,&divFunct); } void TransformData(double data,std::binary_function<double,double,double> *funct) { /* Do stuff here... */ }
正如您所看到的,我试图使用基类指针以多态方式传递函子.问题是std :: binary_function没有声明要实现的子类的operator()成员.