La domanda su dove dovrei mettere funzioni che non sono correlate a una classe ha suscitato un dibattito sul fatto che abbia senso in C ++ combinare funzioni di utilità in una classe o semplicemente farle esistere come funzioni libere in uno spazio dei nomi.
Vengo da uno sfondo C # in cui quest'ultima opzione non esiste e quindi naturalmente tendo a utilizzare le classi statiche nel piccolo codice C ++ che scrivo. La risposta più votata su questa domanda, nonché diversi commenti, tuttavia affermano che le funzioni libere devono essere preferite, anche suggerendo che le classi statiche sono un anti-schema. Perché è così in C ++? Almeno in superficie, i metodi statici su una classe sembrano indistinguibili dalle funzioni libere in uno spazio dei nomi. Perché quindi la preferenza per quest'ultima?
Le cose sarebbero diverse se la raccolta di funzioni di utilità richiedesse alcuni dati condivisi, ad esempio una cache che si potrebbe archiviare in un campo statico privato?