fork(1) download
  1. #include <iostream>
  2.  
  3. struct OpenTag {};
  4. struct HighTag {};
  5. struct LowTag {};
  6. struct CloseTag {};
  7. struct Ema100Tag {};
  8.  
  9. struct Tick {
  10.  
  11. template <typename Tag> struct Member
  12. {
  13. double val;
  14.  
  15. operator double () const { return val; }
  16.  
  17. operator double& () { return val; }
  18. };
  19.  
  20. struct AllMembers : Member<OpenTag>,
  21. Member<HighTag>,
  22. Member<LowTag>,
  23. Member<CloseTag>,
  24. Member<Ema100Tag> {};
  25.  
  26. AllMembers data;
  27.  
  28. template <typename Tag>
  29. double operator[](Tag t) const
  30. {
  31. return (Member<Tag> const&)(data);
  32. }
  33.  
  34. template <typename Tag>
  35. double& operator[](Tag t)
  36. {
  37. return (Member<Tag>&)(data);
  38. }
  39.  
  40. };
  41.  
  42. int main()
  43. {
  44. Tick t;
  45. t[OpenTag()] = 12.345;
  46. std::cout << t[OpenTag()] << std::endl;
  47. }
  48.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
12.345