Voglio generare numeri univoci per ogni classe nella mia intestazione, primi nel mio caso numeri primi ma diciamo che questo dovrebbe essere solo numeri consecutivi, ad esempio 1,2,3,4, ecc.Genera numeri univoci al momento della compilazione
Certo che posso hardcode questi:
struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
Questo è molto soggetto ad errori in quanto, in realtà, le classi non sono così piccoli e se posso aggiungere una nuova classe nel mezzo devo cambiare tutti i seguenti numeri se non voglio perdere completamente la panoramica degli ID.
Vorrei poter effettuare le seguenti operazioni:
struct A { enum { ID = get_next_int(); }; };
struct B { enum { ID = get_next_int(); }; };
struct C { enum { ID = get_next_int(); }; };
struct D { enum { ID = get_next_int(); }; };
Ma dal momento che le funzioni constexpr chiamate non possono avere effetti collaterali per quanto ne so, questo è impossibile. Penso che l'utilizzo di macro come questo sia impossibile.
Vorrei anche essere fortunati con qualcosa di simile:
struct A_id_holder : some_base_counter {};
struct A { enum { ID = A_id_holder::ID; }; };
struct B_id_holder : some_base_counter {};
struct B { enum { ID = B_id_holder::ID; }; };
struct C_id_holder : some_base_counter {};
struct C { enum { ID = C_id_holder::ID; }; };
struct D_id_holder : some_base_counter {};
struct D { enum { ID = D_id_holder::ID; }; };
Ma onestamente, non ho idea di come implementare questo.
Posso raggiungere il mio obiettivo e se sì, come?
Che cosa ha a che fare questo con TMP? È una strada che hai esplorato, o speri solo che un mago del TMP abbia una risposta inaspettata? – jpm
Sì, poiché questo non può essere fatto con macro, TMP è la mia ultima speranza (o come inizializzare un ID altrimenti?). Sarei anche contento di altre possibilità. Ho modificato il mio post per essere più generale. – helami
Perché vuoi questo? –