2011-07-27 18 views
17

¿Hay alguna ventaja de utilizar private funciones (probablemente también static) en una clase de funciones de utilidad utilizados en mi clase que no necesitan acceso a los datos de una instancia sobre el uso de static funciones globales en mi .cpp archivo que implementa la clase?
El primero me parece más limpio, pero el segundo realmente tiene más sentido ya que estas funciones ni siquiera necesitan mencionarse en el archivo .h.vs. funciones estáticas privadas en C++

+1

Relacionado: http://stackoverflow.com/questions/2739146/c-oop-which-functions-to-put-into-the-class –

Respuesta

11

No voy a poner estática privada funciones para el archivo de encabezado si no son necesarios. Solo contaminarían el archivo de encabezado y agregarían más trabajo.

Pero es posible que se necesiten funciones estáticas privadas cuando se tiene un método/función de plantilla en una clase y se quiere usar esa función de ayuda en ella.

Otra razón para usar funciones estáticas privadas en lugar de funciones estáticas globales es que pueden acceder a miembros privados de la clase (variables, funciones).

5

Si una función dada se relaciona con su class, entonces tiene razón. Debe hacerlos private static dentro de su cuerpo class.

[Nota: Si aquellos función de utilidad no se refiere en absoluto a continuación, se puede pensar en encerrándolos en una u otra clase namespace Util y mantenerlo dentro del alcance del archivo.]

+1

se puede relacionar con la implementación de clase , no la interfaz de clase, como en la mayoría de los casos. en este caso no hay necesidad de contaminar la interfaz de clase –

1

Simplemente haga que sean funciones fijas de archivos. Si no tienen nada que ver con la clase, no los pongas allí.

+2

Recomendaría la función de espacio de nombre sin nombre en lugar del archivo estático –

+1

Soy consciente de que "C++ moderno" recomienda usar funciones en espacios de nombres sin nombre, pero no veo ninguna ventaja técnica. De hecho, podría ser una desventaja ya que tal función tiene un enlace externo y puede ralentizar el enlace. – zvrba

+0

http://stackoverflow.com/questions/154469/unnamed-anonymous-namespaces-vs-static-functions –

0

Si la función privada no modifica los miembros de la clase, no tiene ninguna ventaja sobre la estática global. Estar dentro o fuera de la clase no hace ninguna diferencia

Cuestiones relacionadas