¿Cuál es la ventaja de esta llamada a función indirecta?

Encontré el siguiente código en una biblioteca:

class Bar {
public:
  bool foo(int i) {
   return foo_(i);
  }
private:
  virtual bool foo_(int i) = 0;
};

Ahora me pregunto: ¿por qué usarías esta indirección? ¿Podría haber alguna razón por la cual lo anterior sería mejor que la alternativa simple:

class Bar {
public:
  virtual bool foo(int i) = 0;
};

Respuestas a la pregunta(4)

Su respuesta a la pregunta