Я хотел бы написать функцию invoke_measure_time
, которая будет измерять время выполнения любой другой функции, заданной в качестве аргумента. Я частично решил свою проблему, у меня есть следующий кусок кода:
int sum(int a, int b){
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
return a + b;
}
template<typename T>
std::pair<std::chrono::milliseconds, T> invoke_measure_time(std::function<T()> f){
auto start = std::chrono::system_clock::now();
auto f_result = f();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - start);
return std::make_pair(duration, f_result);
}
int main(){
auto fun = std::bind(sum, 10, 20);
auto emma = invoke_measure_time<int>(fun);
std::cout << "time: " << emma.first.count() << ", result = " << emma.second << std::endl;
}
Работает нормально, результаты ожидаемые, но первая строка main
вызывает головную боль. Как я могу изменить invoke_measure_time
, чтобы принимать любую функцию, не только эту без аргументов? Я бы хотел, чтобы моя главная выглядела так:
int main(){
auto emma = invoke_measure_time<int, int, int>(sum, 10, 20);
std::cout << "time: " << emma.first.count() << ", result = " << emma.second << std::endl;
}
или что-то в этом роде. Как мне этого добиться?