Sono sicuro che la seguente domanda ha già una buona risposta da qualche altra parte, ma è difficile da trovare poiché non conosco il " nome "del mio problema.Come progettare una classe che è costante dopo l'inizializzazione ed esiste solo una volta nell'intero programma
Sto progettando una classe/oggetto/"qualcosa" con le seguenti proprietà:
- Si tratta di una sorta di tabella di ricerca.
- Non cambia dopo l'inizializzazione.
- Ha diversi membri non primitivi.
- Ha una funzione di inizializzazione complicata.
- È lo stesso per l'intero programma.
- Viene parametrizzato dai parametri del modello.
Quindi questo suona come una classe template statico:
template <int T>
class LookupTable{
public:
static void init(){
// create entries depending on T
}
private:
static vector<Entries> entries;
}
Quello che mi piace è che ho bisogno di chiamare init()
da qualche parte nel mio programma. Quindi la prima domanda è: Come posso rendere questa classe completamente autonoma, senza bisogno di essere inizializzata esplicitamente da qualche parte?
Seconda parte: Qual è l'approccio di progettazione generale per implementare tale classe? Sarei perfettamente felice con un link per un buon esempio.
Un possibile candidato è il singleton. Ma ho qualche dubbio: - Il singleton considerava un cattivo design in molti casi. Va bene per una tabella di ricerca come descritto? - Singleton è una notazione piuttosto lunga, poiché devo usare LookupTable::getInstance()->getEntry(idx)
.
per la prima parte, utilizzare il costruttore –
Quello che si desidera è chiamato 'Singleton'. Se cerchi google, puoi trovare molte soluzioni di esempio per C++ – maja
possibile duplicato di [modello di progettazione Singleton C++] (http://stackoverflow.com/questions/1008019/c-singleton-design-pattern) – maja