Su kilometraje puede variar ...
La respuesta hard-core sería que la herencia no pública es inútil.
En lo personal, lo uso en cualquiera de los dos casos:
- me gustaría activar la optimización Base vacía si es posible (por lo general, en el código de la plantilla con los predicados pasados como parámetros)
- me gustaría reemplazar una función
virtual
en la clase
en cualquiera de los casos, por lo tanto yo utilizo private
herencia porque la herencia en sí es un detalle de implementación.
He visto personas usando private
herencia de forma más liberal, y casi sistemática, en lugar de composición al escribir envoltorios o extender comportamientos. C++ no proporciona una sintaxis de delegado "fácil", por lo que le permite escribir using Base::method;
para proporcionar inmediatamente el método en lugar de escribir una llamada de reenvío adecuada (y todas sus sobrecargas). Yo diría que es mala forma, aunque ahorra tiempo.
Ya no puede hacer preguntas CW. Si lo desea, puede marcar los mods para que lo haga por usted. – sbi
También en territorio similar a http://stackoverflow.com/questions/2090661/protected-inheritance. Ambas preguntas muestran que hay casos en que las personas usan herencia no pública, de manera bastante defendible (¡no es que yo diga que la estás atacando!). – AAT