fork(1) download
  1. #include <chrono>
  2. #include <iostream>
  3. #include <functional>
  4.  
  5. auto measure = [](auto&& function, auto&&... parameters) -> decltype(auto)
  6. {
  7. const std::chrono::steady_clock::time_point startTimePoint =
  8. std::chrono::steady_clock::now();
  9.  
  10. decltype(auto) returnValue = std::forward<decltype(function)>(function)(
  11. std::forward<decltype(parameters)>(parameters)...);
  12.  
  13. const std::chrono::steady_clock::time_point stopTimePoint =
  14. std::chrono::steady_clock::now();
  15.  
  16. const std::chrono::duration<double> timeSpan = std::chrono::duration_cast<
  17. std::chrono::duration<double>>(stopTimePoint - startTimePoint);
  18.  
  19. std::cout << "Computation took " << timeSpan.count()
  20. << " seconds." << std::endl;
  21.  
  22. return returnValue;
  23. };
  24.  
  25. class Test
  26. {
  27. public:
  28.  
  29. int& computation(double dummy)
  30. {
  31. static int x = 123;
  32.  
  33. std::cout << "Received " << dummy << ". Computing..." << &x << std::endl;
  34.  
  35. return x;
  36. }
  37. };
  38.  
  39. int main(int, char**)
  40. {
  41. Test instance;
  42.  
  43. auto function = std::bind(&Test::computation, instance, std::placeholders::_1);
  44.  
  45. decltype(auto) result = measure(function, 1.0);
  46.  
  47. std::cout << "Result: " << result << " " << &result << std::endl;
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
Received 1. Computing...0x602088
Computation took 4.6965e-05 seconds.
Result: 123 0x602088