title: Iterating over tuple in C++17/20
body: <p>Does anyone know of a good, clean way to iterate over a tuple in C++17 / 20?  Let's say we have a bit of code like this:</p>
  
  <pre><code>class Test
  {
      public:
          Test( int x ) : x_(x) {};
          void Go() const { std::cout &lt;&lt; "Hi!" &lt;&lt; x_ &lt;&lt; "\n" ; }
          int x_;
  };
  int main()
  {
      std::tuple tplb{ Test{1} , Test{2} ,  Test{3} };
  }
  </code></pre>
  
  <p>How could we iterate through the tuple and call the <code>Go()</code> method on each using the latest 17/20 features?</p>
  
  <p>I know you could just have a vector of the object and then it works easily.  My goal with this is to be able to ha e a certain polymorphism without having to use virtual functions.  </p>
  
  <p>The idea would be to be able to have other object types in the tuple that support the same method.  If the method is present in each object then the code would compile and execute without having to use a base-class, virtuals, vtable, etc.</p>
  
  <p>Is there some way perhaps with <code>std::apply</code> or <code>std::invoke</code> ?</p>