In qualche modo registra le mie classi in una lista

Mi piacerebbe essere in grado di registrare le mie classi all’interno di una std::map o un vettore, non pensare a duplicati e simili per ora, ma non voglio registrarlo all’interno della chiamata del costruttore di class o di qualsiasi funzione interna di la class, in qualche modo, lo fa al di fuori della class quindi, anche se non lo istanziamo mai, sarei in grado di sapere che esiste.

Esempio:

 // Somehow, from outside the myclass, in a scope that will be called //in the begining of the proccess, add "MyClass1" to a //list so it can be instanciated later class MyClass1{ } 

Quindi #define un #define o, se ansible, un modello.
Non so se mi sono chiarito (di nuovo) … Il mio punto è che ho bisogno di conoscere ogni class che ho senza dover chiamare tutti e ciascuno di loro.
La mia idea era di creare un #define per rendere più semplice la dichiarazione dell’intestazione della class e chiamare qualcosa che registrasse quella specifica class in una lista

Questo può essere fatto o dovrò mapparlo manualmente?

 // desirable: #define CLASSREGISTER(myclass) makethemagic(##myclass); class myclass { }; 

Lo so, con quella definizione non potrei usare l’ereditarietà ecc … Il mio punto era cercare di dare un esempio di cosa stavo pensando di creare in qualche modo …

    Ecco il metodo per inserire i nomi delle classi all’interno di un vettore. Lascia un commento se ho dimenticato i dettagli importanti. Non penso che funzionerà per i modelli, però.

     struct MyClasses { static vector myclasss; MyClasses(string name) { myclasss.push_back(name); } }; #define REGISTER_CLASS(cls) static MyClasses myclass_##cls(#cls); struct XYZ { }; REGISTER_CLASS(XYZ); 

    Il trucco qui è di fare un po ‘di calcoli prima che venga chiamato main () e tu puoi ottenere questo tramite l’inizializzazione globale. REGISTER_CLASS (cls) genera effettivamente il codice per chiamare il costruttore di MyClasses all’avvio del programma.

    AGGIORNAMENTO : seguendo il suggerimento gf puoi scrivere questo:

     #define REGISTER_CLASS(cls) temp_##cls; static MyClasses myclass_##cls(#cls); class cls class REGISTER_CLASS(XYZ) { int x, y, z; } 

    Usa boost :: mpl, vector o map.