Chcę generować unikalne liczby dla każdej klasy w moim nagłówku, liczby pierwsze w moim przypadku liczb pierwszych ale powiedzmy, że powinny to być tylko kolejne liczby tj. 1,2,3,4 itd.Generowanie unikalnych liczb podczas kompilacji
Oczywiście mogę zakodować te:
struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
To jest bardzo podatne na błędy, ponieważ w rzeczywistości zajęcia nie są tak małe, a jeśli dodać nową klasę w środku muszę zmienić wszystkie następujące numery, jeśli nie chcę całkowicie stracić przeglądu identyfikatorów.
Chciałabym wykonać następujące czynności:
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(); }; };
Ale ponieważ wywołuje funkcje constexpr nie może mieć skutki uboczne AFAIK, jest to niemożliwe. Myślę, że używanie makr taki wynik też jest niemożliwe.
Byłbym również szczęście z czymś takim:
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; }; };
Ale szczerze mówiąc, nie mam pojęcia, jak zaimplementować to.
Czy mogę osiągnąć mój cel, a jeśli tak, to w jaki sposób?
Co to ma wspólnego z TMP? Czy to jest sposób, który zbadałeś, czy też masz nadzieję, że kreator TMP przyjdzie z odpowiedzią z nieba? – jpm
Tak, ponieważ nie można tego zrobić za pomocą makr, TMP jest moją ostatnią nadzieją (lub jak zainicjować identyfikator inaczej?). Byłbym też zadowolony z innych możliwości. Zmieniłem mój post, by był bardziej ogólny. – helami
Dlaczego tego chcesz? –