Este es el Non-Virtual Interface Idiom (NVI). Esa página de Herb Sutter tiene muchos detalles al respecto. Sin embargo, atempere lo que lee allí con lo que las preguntas frecuentes de C++ Lite dicen here y here.
La principal ventaja de NVI es separar la interfaz de la implementación. Una clase base puede implementar un algoritmo genérico y presentarlo al mundo, mientras que sus subclases pueden implementar los detalles del algoritmo a través de funciones virtuales. Los usuarios externos están protegidos de los cambios en los detalles del algoritmo, especialmente si luego decide que desea agregar un código de procesamiento previo y posterior.
La desventaja obvia es que tiene que escribir un código adicional. Además, las funciones virtuales private
son confusas para mucha gente. Muchos codificadores creen erróneamente que no puedes anularlos. A Herb Sutter parece gustarle private
virtuales, pero en mi humilde opinión es más efectivo en la práctica seguir las recomendaciones de C++ FAQ Lite y hacer que sean protected
.