Attualmente sto scrivendo una classe che esegue un calcolo piuttosto complesso che dovrebbe essere attivato da una chiamata di funzione.
I passi per usare la classe sarebbero:
- Costruzione che include l'inizializzazione dei parametri di base
- Inizializzazione con alcune altre impostazioni specifiche del caso
- Il calcolo attuale
- Ora, l'utente della classe può recuperare gli output che sono memorizzati come variabili di classe.
Il passaggio 2 è separato dal passaggio 1 in modo da poter eseguire più calcoli con gli stessi parametri semplicemente cambiando quelli specifici del caso invece di creare un nuovo oggetto.
Il grande calcolo deve ora essere separato in diverse funzioni ausiliarie. Il mio approccio per questo sta utilizzando le funzioni private void
che gestiscono solo le variabili di classe, ad es.
class MyComputation {
public:
MyComputation(/* some basic parameters */);
void initSpecificCase(/* some case specific parameters */);
void doTheActualComputation();
Results getResults();
private:
void computeThisAndThat();
void computeSomeInterimResults();
// Inputs, outputs, interim results
};
dove doTheActualComputation
chiama computeThisAndThat
e computeSomeInterimResults
.
Questo uso delle funzioni private è una buona pratica? O dovrei piuttosto mettere tutte le cose ausiliarie in uno spazio dei nomi anonimo? Ciò comporterebbe il passaggio di molti argomenti alle funzioni nello spazio dei nomi anonimo, anche alcuni elementi complessi del contenitore.
Si prega di notare che questa domanda non riguarda il passare argomenti ma piuttosto l'uso di void
funzioni membro private con l'assunto che i citati risultati intermedi hanno senso come variabili di classe che descrivono effettivamente stato dell'oggetto classe.