我有 3 个算法功能:
void algo1(int para1, int para2);
void algo2(int para1, int para2);
void algo3(int para1, int para2);
我想设置一个计时器来测试这些功能的效率
int get_execute_time( void(*f)(int para1, int para2) );
我将函数作为参数传递get_execute_time以避免过多,但是,问题是我还需要传递参数,即para1, para2。
所以我让计时器功能更改为
get_execute_time( void(*f)(int para1, int para2) ,
int para1, int para2) {
(*f)(para1, para2); // call it
}
而且,上面的代码对我来说似乎很难看,那么是否有任何选项可以包装代码并让代码稍后在 C++ 中执行?
这样我就可以这样做:
// definition
get_execute_time(this_code_will_execute_later) {
this_code_will_execute_later();
};
// usage
get_execute_time(algo1(para1, para2));
临时解决方案:利用class来实现closure-like事物(灵感来自我们在 C++ 中有闭包吗?
class timer {
private:
int para1;
int para2;
public:
timer(int para1, int para2);
operator () (void(*f)(int para1, int para2)) { (*f)(para1, para2) }
}
// thus we can write these following code
timer timer(para1, para2);
std::cout << "run " << timer(algo1) << " ms";
std::cout << "run " << timer(algo2) << " ms"
std::cout << "run " << timer(algo3) << " ms"
那么,是否存在更好的选择?不管怎么说,还是要谢谢你!