TimerHelpers.h 834 B

12345678910111213141516171819202122232425262728293031323334
  1. #ifndef TIMERHELPERS_H
  2. #define TIMERHELPERS_H
  3. #include <functional>
  4. namespace Timer {
  5. namespace Helpers {
  6. template <int... Is>
  7. struct index {};
  8. template <int N, int... Is>
  9. struct gen_seq : gen_seq<N - 1, N - 1, Is...> {};
  10. template <int... Is>
  11. struct gen_seq<0, Is...> : index<Is...> {};
  12. template <typename ...FunctionArguments, typename ...Arguments, int... Is>
  13. void execute(std::function<void(FunctionArguments...)> const & function, std::tuple<Arguments...>& tuple, index<Is...>)
  14. {
  15. function(std::get<Is>(tuple)...);
  16. }
  17. template <typename ...FunctionArguments, typename ...Arguments>
  18. void execute(std::function<void(FunctionArguments...)> const & function, std::tuple<Arguments...>& tuple)
  19. {
  20. execute(function, tuple, gen_seq<sizeof...(Arguments)>{});
  21. }
  22. } // namespace Helpers
  23. } // namespace Timer
  24. #endif // TIMERHELPERS_H