Intendono cose diverse. In un contesto class
, static
significa che i metodi non richiedono un oggetto su cui agire, quindi sono più simili alle funzioni libere. In un contesto namespace
, significa che le funzioni hanno un collegamento interno quindi sono univoci per l'unità di traduzione in cui sono definite.
Inoltre, i membri di un class
sono privati per impostazione predefinita così, come scritto, le funzioni di classe sono solo chiamabili l'uno dall'altro. Dovresti aggiungere un identificatore di accesso public:
o rendere lo class
un struct
per cambiarlo.
Se sono necessarie numerose funzioni gratuite e non sono necessari oggetti classe, è probabilmente più adatto definirle come funzioni non-static
in uno spazio dei nomi. Se sono definiti in linea in un file di intestazione, di solito devono essere dichiarati inline
. Ciò è implicito se sono definiti in un class
.
fonte
2009-08-26 06:17:57
Grazie, Stavo scrivendo alcune routine di supporto per ottenere informazioni di sistema dall'analisi/proc fs, queste routine di supporto non richiedono un'associazione con la classe, nel mio requisito ha senso utilizzare lo spazio dei nomi. Le cose potevano essere cambiate se volevo nascondere alcune di queste routine di aiuto, che altre routine di aiuto chiamano ma non esposte, in questo caso avrei potuto preferire l'approccio di classe. – harishvk27