fork(1) download
  1. #include <iostream>
  2. #include <tuple>
  3. #include <cstddef>
  4. using namespace std;
  5.  
  6.  
  7. template <class T, class Tuple>
  8. struct Index;
  9.  
  10. template <class T, class... Types>
  11. struct Index<T, std::tuple<T, Types...>> {
  12. static const std::size_t value = 0;
  13. };
  14.  
  15. template <class T, class U, class... Types>
  16. struct Index<T, std::tuple<U, Types...>> {
  17. static const std::size_t value = 1 + Index<T, std::tuple<Types...>>::value;
  18. };
  19.  
  20. template<class EnumType, template<class T, T> class Element, EnumType... enumValues>
  21. class Map
  22. {
  23. public:
  24. using Type = std::tuple<Element<EnumType, enumValues>...>;
  25.  
  26. template<EnumType enumValue>
  27. using index = Index<Element<EnumType, enumValue>, Type>;
  28.  
  29. template<EnumType enumValue>
  30. Element<EnumType, enumValue>& get();
  31.  
  32. Type storage_;
  33. };
  34.  
  35. template<class EnumType, template<class T, T> class StorageElement, EnumType... enumValues>
  36. template<EnumType enumValue>
  37. StorageElement<EnumType, enumValue>& Map<EnumType, StorageElement, enumValues...>::get()
  38. {
  39. return std::get<index<enumValue>::value>(storage_);
  40. }
  41. int main() {
  42. // your code goes here
  43. return 0;
  44. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty