Helpers.h 895 B

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