Como regla general, intente mantenerlo lo más local posible pero tan visible como sea necesario.
Si todo el código que llama a la función reside en el mismo archivo de implementación, esto significa mantenerlo localmente en el archivo de implementación.
Si lo convierte en un método privado estático de su clase, las implementaciones, incluida su clase, no podrían llamarlo, pero aún sería visible para ellas.Por lo tanto, cada vez que cambie la semántica de ese método, todas las implementaciones, incluidas sus llamadas, tendrán que volver a compilarse, lo que es una carga, ya que, desde su punto de vista, ni siquiera necesitan conocer esos seminarios.
Por lo tanto, para minimizar las dependencias innecesarias, querrá convertirla en una función global estática.
Sin embargo, si alguna vez se encuentra repitiendo esta función global en múltiples archivos de implementación, sería el momento de mover la función a un par de archivos de cabecera/implementación separados, para que todos los llamantes puedan incluirla.
Si coloca esa función en un espacio de nombre, en el alcance global, o como una función estática en una clase, realmente está de buen gusto.
En una nota final, si opta por la función estática global, hay una versión "más similar a C++": espacios de nombres anónimos. Tiene la buena propiedad de que puede almacenar estado y también evita que los usuarios puedan incluso declarar cualquiera de sus funciones.
// in your .cpp file
namespace /*anonymous*/
{
void foo()
{
// your code here
}
};
void MyClass::FooUser1() { foo(); }
void MyClass::FooUser2() { foo(); }
El hecho de que esta parte del código aparezca dos veces, no significa que tenga que hacerlo solo. ¿Qué es lo que quieres ganar? –
¿Qué haces en sharedPart() si no depende ni altera el estado de un objeto? – Tobias
@ammoQ: ¿Sugiere duplicar el código en ambos lugares? Esa es una idea horrible –