Immaginate di avere una classe C++ chiamata MyClass
.Differimento della costruzione di oggetti statici C++ - GCC su Linux
Immagina di non avere accesso al codice sorgente di MyClass
... è contenuto in una libreria e vengono forniti solo la libreria e il file di intestazione per MyClass
.
Immaginate che la classe stessa richieda la pre-configurazione dell'ambiente ... per esempio ... prima che il costruttore della classe possa essere chiamato, ho bisogno di fare qualche setup. La classe è normalmente pensato per essere utilizzato come segue:
void func() {
doGlobalSetup();
MyClass myInstance(1,2,3);
myInstance.doSomething();
...
}
Ora ho la situazione in cui abbiamo bisogno di creare un'istanza globale della classe come ad esempio:
MyClass myInstance(1,2,3);
int main(int argc, char *argv[]) {
doGlobalSetup();
myInstance.doSomething();
}
Il problema è che in questo storia, l'istanza di MyClass
viene creata prima della la chiamata a doGlobalSetup()
. Viene istanziata prima che venga chiamato main()
. Quello che voglio fare è differire la creazione di myInstance()
fino a più tardi o essere in grado di eseguire doGlobalSetup()
in qualche modo prima dell'istanza della classe.
questa è una semplificazione della storia reale ... quindi supponiamo:
- Non posso cambiare la struttura interna di
MyClass
. - Deve essere presente una variabile di istanza denominata
myInstance
di tipoMyClass
(Impossibile modificare la logica suMyClass *pMyInstance
).
Mille grazie per la lettura.
È possibile copiare 'MyClass'? Correlati, considererei davvero se si desidera creare un'istanza globale ... Tuttavia, se è possibile copiare, penso che ci sia una soluzione facile. –
Si prega di smettere di usare 'void main', ISO C++ permette' int main() 'o' int main (int, char **) 'solo – Danh
@Danh - Scusa Danh ... doveva essere uno pseudo codice in contrapposizione a una vera app. Tuttavia ho cambiato il testo come richiesto. – Kolban