我有一个包含各种算法的类:
class Algorithm{
Algorithm()=delete;
public:
template <typename IntegerType>
static IntegerType One(IntegerType a, IntegerType b);
template <typename IntegerType>
static IntegerType Two(IntegerType a, IntegerType b);
template <typename IntegerType>
static IntegerType Three(IntegerType a, IntegerType b);
// ...
};
它们可以通过以下方式调用:
int main(){
Algorithm::One(35,68);
Algorithm::Two(2344,65);
//...
}
现在我想创建一个函数,它将采用任何“算法”函数并在调用该函数之前和之后执行相同的步骤。
这是我所拥有的:
template <typename IntegerType>
void Run_Algorithm(std::function<IntegerType(IntegerType,IntegerType)>fun, IntegerType a, IntegerType b){
//... stuff ...
fun(a,b);
//... stuff ...
return;
}
当我尝试像这样调用函数时:
Run_Algorithm(Algorithm::One,1,1);
我得到的错误是:
cannot resolve overloaded function ‘One’ based on conversion to type ‘std::function<int(int, int)>’
我该如何设置一个通用例程,它将所需的算法作为参数?
编辑:
此解决方案按需要工作。它看起来像这样:
template <typename IntegerType>
void Run_Algorithm(IntegerType(*fun)(IntegerType, IntegerType), IntegerType a, IntegerType b){
//... stuff ...
fun(a,b);
//... stuff ...
return;
}