Eso suena bien, y funcionaría bien. Sin embargo, hay algunas cosas que considerar.
Es posible que las funciones estáticas privadas sean aún más privadas. Si acaba de colocarlos en el archivo .cpp como funciones gratuitas (no en una clase, pero idealmente en un "espacio de nombres sin nombre"), entonces no aparecerían en el archivo .h. Esto sería ventajoso porque otro archivo .cpp que utiliza su clase no vería estas variables estáticas privadas. Eso haría que el tiempo de compilación sea más rápido. Además, le dejaría libre para alterar las funciones en el archivo .cpp, y si realizó algún cambio, no sería necesario volver a compilar todos los archivos que utilizan el archivo .h ya que no tendría que cambiar el archivo. .h archivo para cambiar estas funciones.
En segundo lugar, a veces las funciones estáticas pueden hacer que la escritura de las pruebas unitarias sea más complicada. Si tiene una clase X que utiliza estas funciones estáticas, es complicado aislar la clase X de las funciones estáticas si desea probar la clase X. Si, en cambio, utilizó métodos no estáticos y definió una clase de interfaz que la clase que está escribiendo deriva de, podría usar más fácilmente las técnicas de 'inversión de control' e 'inyección de dependencia' para escribir pruebas de unidad para sus clases. No explicaré esas técnicas aquí, ya que hay muchas descripciones buenas que ya flotan en Internet.
no está claro qué quiere decir con "útil/no útil por sí mismo" - ¿puede dar más detalles? – davka
La función estática está formateando algo pesado, así que lo he descompuesto. El usuario/cliente llamará a la función de servicio pesado, que a su vez depende de funciones más pequeñas que no son útiles para el cliente en absoluto y por lo tanto las funciones son privadas (estoy bajo el supuesto de que uno de los usos de declarar una función privada es dar al cliente una fuerte pista de que esta función no está destinada a ser utilizada por nadie, excepto la clase/objeto en sí). – Samaursa
Sé por qué las funciones se hacen privadas o públicas :), es "por su cuenta" lo que me confunde. En realidad, estoy tratando de averiguar si estas funciones deberían pertenecer a la clase, o si pueden ser funciones libres, como sugiere @mkaes. Si no usan miembros estáticos, la única razón por la que pertenecen a la clase es el alcance, lo que significa que son parte conceptual de los servicios de la clase. Bueno, por ej. es el método de fábrica, p.'Documento :: createDoc (Documento :: DocType)' – davka