Я хочу генерировать уникальные числа для каждого класса в моем заголовке, простые числа в моем случае простые, но допустим, это должны быть только последовательные числа, т.е. 1,2,3,4, и Т. Д.
Конечно, я могу жестко запрограммировать их:
struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
Это очень подвержено ошибкам, так как на самом деле классы не такие маленькие, и если я добавлю новый класс в середине, мне придется изменить все следующие числа, если я этого не сделаю. Не хотите полностью потерять обзор идентификаторов.
Я хотел бы сделать следующее:
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(); }; };
Но поскольку вызовы функций constexpr не могут иметь побочных эффектов, это невозможно. Думаю с макросами такой результат тоже невозможен.
Мне бы тоже повезло с чем-то вроде этого:
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; }; };
Но, честно говоря, я понятия не имею, как это реализовать.
Могу ли я достичь своей цели, и если да, то как?