fork download
  1. #include <iostream>
  2. #include <utility>
  3. #include <tuple>
  4.  
  5. template<typename Ret, typename... Ts, size_t... I>
  6. Ret callFunction_(Ret (*fn)(Ts...), std::tuple<Ts...> tup, std::index_sequence<I...>)
  7. {
  8. return fn(std::get<I>(tup)...);
  9. }
  10.  
  11. template<typename Ret, typename... Ts, typename Tuple>
  12. Ret callFunction(Ret (*fn)(Ts...), Tuple&& tup)
  13. {
  14. return callFunction_(fn, std::forward<Tuple>(tup),
  15. std::make_index_sequence<std::tuple_size<Tuple>{}>{});
  16. }
  17.  
  18. int foo(int x, int y) {return x * y;}
  19.  
  20. int main()
  21. {
  22. auto i = callFunction(foo, std::make_tuple(2, 3));
  23. std::cout << i;
  24. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
6