fork download
  1. #include <tuple>
  2. #include <vector>
  3.  
  4. template<class Type>
  5. struct Pool {
  6. std::vector<Type> components;
  7. };
  8.  
  9. template<class... Types>
  10. class Storage {
  11. public:
  12. std::tuple<Pool<Types>...> pools;
  13.  
  14. template<class SelectedType0, class... SelectedTypes>
  15. std::tuple<std::vector<SelectedTypes>&...> getVectorsFromTuple();
  16.  
  17. template<class... SelectedTypes>
  18. void iterate();
  19. };
  20.  
  21. template<class... Types>
  22. template<class SelectedType0, class... SelectedTypes>
  23. std::tuple<std::vector<SelectedTypes>&...> Storage<Types...>::getVectorsFromTuple() {
  24. return {};
  25. }
  26.  
  27. template<class... Types>
  28. template<class... SelectedTypes>
  29. void Storage<Types...>::iterate() {
  30. std::tuple<std::vector<SelectedTypes>&...> vectors = getVectorsFromTuple<SelectedTypes...>();
  31. // getVectorsFromTuple should get the values in the tuple based on types
  32. // and save reference to each tuple item's structure's `components`
  33. // property in another tuple
  34. }
  35.  
  36. struct IntComponent {
  37. int integer;
  38. };
  39.  
  40. struct FloatComponent {
  41. float real;
  42. };
  43.  
  44. int main() {
  45. Storage<IntComponent, FloatComponent> storage;
  46. // This function currently gives an error
  47. // due to unimplemented `getVectorsFromTuple`
  48. // storage.iterate<IntComponent>();
  49. return 0;
  50. }
Success #stdin #stdout 0s 5376KB
stdin
Standard input is empty
stdout
Standard output is empty