在 C++ 中,有两种方法可以将一个函数传递给另一个看似等效的函数。
#include <iostream>
int add1(int i){ return i+1; }
int add2(int i){ return i+2; }
template <int (*T)(int) >
void doTemplate(int i){
std::cout << "Do Template: " << T(i) << "\n";
}
void doParam(int i, int (*f)(int)){
std::cout << "Do Param: " << f(i) << "\n";
}
int main(){
doTemplate<add1>(0);
doTemplate<add2>(0);
doParam(0, add1);
doParam(0, add2);
}
doTemplate 接受一个函数作为模板参数,而 doParam 接受它作为函数指针,它们似乎都给出了相同的结果。
使用每种方法之间的权衡是什么?