Ho una classe che fondamentalmente crea una versione efficiente della memoria di una struttura da utilizzare in una sezione di codice critica per le prestazioni.
La struttura risultante è brutta ma estremamente veloce, quindi non usarla non è realmente un'opzione, ma non posso nemmeno usarla come unica rappresentazione della mia struttura perché ha parti non rilevanti per l'analisi. Ho già detto che è anche molto brutto?
Chiamiamo questa classe Fast
. Ho anche la rappresentazione originale, carina, chiamiamola Pretty
. Ho una funzione chiamata Process()
che dovrebbe contenere un'istanza di Pretty
, convertirla in Fast
e poi fare qualche milione di calcoli su di essa e sputare un risultato:
Pretty pretty;
// do stuff with pretty
// in another hpp:
double Process(const Pretty& pretty)
{
Fast fast(pretty); // create my fast object
// do some processing on fast
return result; // at this point fast dies
}
L'istanza di Fast
viene creata e muore entro Process
, ma sfortunatamente non posso dichiarare una classe all'interno di una funzione, quindi devo dichiararla altrove.
Ciò che vorrei come fare è rendere l'intera classe accessibile solo a Process
, e nemmeno averla vista da nessun altro (proprio come farei io al contrario dichiarare una funzione private
se la classe fosse l'unico oggetto che avrebbe dovuto accedervi). Ma non posso dichiarare una classe privata!
Ecco il mio tentativo corrente:
class Process
{
public:
static double DoProcess(Pretty pretty); // this is the process function
private:
class Fast
{
// construct fast here (only Process can see this class!)
};
};
E poi chiamo Process::DoProcess()
. Questo non è davvero un problema critico, quindi non l'ho pubblicato su SO, ma è una domanda di stile e mi piacerebbe davvero avere una soluzione chiara! Non ho mai incontrato prima questo problema e mi sono chiesto come gli altri l'hanno affrontato, e se hanno trovato una soluzione migliore.