title: Recursive function pointers. Stroustrup's example
body: <p>Currently I'm reading Stroustrup Programming: Principles and Practice C++. I faced up with this example:</p>
  
  <pre><code>typedef void (*Pfct0)(struct Shape2*);
  typedef void (*Pfct1int)(struct Shape2*,int);
  
  struct Shape2{
      Pfct0 draw;
      Pfct1int rotate;
  };
  
  void draw(struct Shape2* p)
  {
      (p-&gt;draw)(p);
  }
  
  void rotate(struct Shape2* p,int d)
  {
      (p-&gt;rotate)(p,d);
  }
  
  int f(struct Shape2* pp)
  {
      draw(pp);
      return 0;
  }
  </code></pre>
  
  <p>I cannot get what functions draw and rotate actually do.
  I know what is typedef, function pointer, -> operator.
  As I understand p->draw function will call itself recursively. Am I right?
  What practical uses of making such functions as draw or rotate?</p>