Я хочу генерировать уникальные числа для каждого класса в моем заголовке, простые в моем случае простые числа, но предположим, что это должны быть только последовательные числа, то есть 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 функции вызовы не могут иметь побочные эффекты, AFAIK, это невозможно. Я думаю, что использование макросов такого результата тоже невозможно.
Я бы также повезло с чем-то вроде этого:
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; }; };
Но если честно, я понятия не имею, как это осуществить.
Могу ли я достичь своей цели, и если да, то как?
Что это связано с TMP? Это проспект, который вы изучили, или вы просто надеетесь, что мастер TMP придет вместе с ответом из-за синего? – jpm
Да, поскольку это невозможно сделать с помощью макросов, TMP - моя последняя надежда (или как инициализировать идентификатор в противном случае?). Я также был бы рад другим возможностям. Я редактировал свой пост, чтобы быть более общим. – helami
Зачем вам это нужно? –