У меня есть 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"
Итак, Существуют ли лучшие варианты? Спасибо в любом случае!