Quiero generar números únicos para cada clase en mi encabezado, los primos en mi caso primos pero digamos que esto debería ser solo números consecutivos, es decir, 1,2,3,4, etc.Generar números únicos en tiempo de compilación
Por supuesto que puedo codificar los siguientes:
struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
Esto es muy propenso a errores, ya que en realidad las clases no son tan pequeños y si añado una nueva clase en el medio tengo que cambiar todo el siguiente números si no quiero perder completamente la visión general de los ID.
me gustaría poder hacer lo siguiente:
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(); }; };
Pero puesto que las funciones constexpr llamadas no pueden tener efectos secundarios que yo sepa, esto es imposible. Creo que usar macros como resultado es imposible también.
Me gustaría también tener suerte con algo así:
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; }; };
Pero honestamente, no tengo idea de cómo poner en práctica eso.
¿Se puede lograr mi objetivo y, en caso afirmativo, cómo?
¿Qué tiene esto que ver con TMP? ¿Es esa una avenida que has explorado, o solo esperas que un asistente de TMP venga con una respuesta de la nada? – jpm
Sí, dado que esto no se puede hacer con macros, TMP es mi última esperanza (¿o cómo inicializar una ID de lo contrario?). También me alegrarían otras posibilidades. Edité mi publicación para ser más general. – helami
¿Por qué quieres esto? –