Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <array>
  4. #include <functional>
  5. #include <string>
  6. #include <any>
  7.  
  8. // dummy
  9. template<typename T>
  10. T GetValueByKey(const char* key)
  11. {
  12.     return T(0);
  13. }
  14. template<>
  15. int GetValueByKey(const char* key)
  16. {
  17.     return 10;
  18. }
  19. template<>
  20. long GetValueByKey(const char* key)
  21. {
  22.     return 15L;
  23. }
  24. template<>
  25. std::string GetValueByKey(const char* key)
  26. {
  27.     return "aaa";
  28. }
  29.  
  30. template <size_t Idx, typename ... JoinType>
  31. void FindJoinValue(std::tuple<JoinType...> &res, const std::array<const char *, sizeof ... (JoinType)> &keys)
  32. {
  33.     constexpr size_t VarSize = sizeof ... (JoinType);
  34.  
  35.     using KeyType = std::remove_cv_t<std::remove_reference_t<decltype(std::get<Idx>(res))>>;
  36.     KeyType x = GetValueByKey<KeyType>(keys[Idx]);
  37.     std::get<Idx>(res) = x;
  38.  
  39.     if constexpr (Idx != 0)
  40.         FindJoinValue<Idx - 1, JoinType...>(res, keys);
  41. }
  42.  
  43. template <typename ... JoinType>
  44. void FindJoinValue(const std::array<const char *, sizeof ... (JoinType)> &keys/*, std::function<bool(std::tuple<JoinType...>)> c*/)
  45. {
  46.     constexpr size_t VarSize = sizeof ... (JoinType);
  47.  
  48.     std::tuple<JoinType...> res;
  49.  
  50.     FindJoinValue<VarSize - 1, JoinType...>(res, keys);
  51.  
  52.     //c(res);
  53. }
  54.  
  55. int main(int argc, char** argv)
  56. {
  57.     std::array<const char*, 3> arr{ "Hey", "Hi", "Hello" };
  58.  
  59.     FindJoinValue<int, long, std::string>(arr);
  60.  
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement