Dada una variable foo
de tipo FooClass*
y una variable miembro en el que la clase llamada bar
, es la distancia entre foo
y &(foo->bar)
el mismo en cualquier situación con algunas limitaciones:Expertos en C++: ¿el desplazamiento de una variable miembro a su constante de clase en estas condiciones?
FooClass
es un tipo no-POD.Sabemos que
foo
siempre apuntará a una instancia deFooClass
, y no a algún subtipo de la misma.Solo nos importa el comportamiento en un único compilador y una sola compilación; es decir, el valor que esto puede dar como resultado bajo gcc nunca se usa en el código compilado con MSVC, y nunca se guarda para ser reutilizado entre compilaciones. Se calcula en el binario y se usa en el binario, y eso es todo.
No usamos un
new
personalizado, aunque algunas instancias de la clase pueden ser asignadas en pila y algunas asignadas en el montón.No hay
ctor
explícito paraFooClass
; se basa en el generado por el compilador (y cada uno de los campos enFooClass
es POD o constructable por defecto).
no puedo encontrar una garantía de cualquier manera sobre esto en el estándar (ni tampoco espero), pero mi prueba rudimentaria con gcc me lleva a creer que siempre será el caso. También sé que esta garantía está hecha para tipos POD, pero supongamos que este tipo no puede ser POD.
Una actualización/aclaración: esto es solo para una sola compilación de un solo binario; los desplazamientos calculados nunca saldrán de esa única ejecución. Básicamente, quiero poder identificar de forma única los campos de una clase en un mapa estático y luego poder buscar en ese mapa algún truco de macro/plantilla/MAL. Es solo para mi propia diversión, y ninguna máquina de soporte de vida dependerá de este código.
Quiero identificar de manera única a los miembros de modo que pueda ponerlos en un "conjunto" de géneros e iterar sobre ellos. Implica plantillas y macros, por lo que debe ser automático (no puedo simplemente hacerlo en el ctor por nombre). Mi hack actual funciona, ¡pero gracias por la publicación informativa! – hazzen
Puede ordenar por miembros utilizando punteros de datos de miembros también –
Estoy haciendo algo similar (fooOptions basadas en macros estructura para construir objetos Foo que necesitarían muchos parámetros para configurar, algunos opcionales y otros obligatorios), y lo estaba intentando como pocas pulsaciones de teclas como sea posible: la forma enlazada funcionaría también si quisiera escribir más. – hazzen