No hay ningún valor añadido a las funciones de miembro static
, como ha identificado correctamente. Peor aún, cuando se usa para detalles de implementación, esto introduce dependencias adicionales (en términos de compilación).
La única uso que no podía ser emulado con un sin función anónima, es el protected
acceso, es decir, una clase derivada para acceder a una función estática de los padres. Sin embargo, esto nunca es necesario: puedes simplemente convertirlo en una función miembro regular (supongo que no tienes estado global, de lo contrario la distinción estática/amiga no es de interés inmediato).
Se ha invocado el uso de las funciones static
en la metaprogramación de plantillas ... sin embargo, es muy similar al problema de los tipos internos: hace que sea difícil proporcionar una versión predeterminada. Por otra parte, una función gratuita adecuadamente definido (que toma el tipo como un puntero), puede proponer una versión de la plantilla:
struct some_traits
{
static void doStuff();
};
// versus
struct some_traits {};
void doStuff(some_traits*);
// and the default: void doStuff(...);
Y, por supuesto, siempre existe la pregunta de por qué esto debería ser una función estática , cuando una función miembro proporcionaría más flexibilidad al usuario. En este sentido, citaré el movimiento que hizo el Comité Estándar con el concepto Allocator
: los asignantes con estado ahora están autorizados, lo que nos da la oportunidad de agrupar los nodos de un dado map
en una misma página en lugar de distribuirlos por todo el montón.
Finalmente, existe la interfaz problema. Sin embargo, hace mucho tiempo que Sutter abogó por que una clase y las funciones gratuitas definidas en el mismo encabezado constituyesen la interfaz pública de esta clase => ¡para eso es ADL! Entonces, es más algo para consolar a los antiguos programadores de OO que una "buena práctica".
Realmente, no veo ningún beneficio al utilizar las funciones de miembro static
. Me gustaría que la gente piense lo contrario para proponer casos reales.
A menudo, francamente, no deberías. –