Es trivial obtener el tamaño del campo de una estructura en C++ si tiene una instancia de la estructura. P.ej. (Sin compilar):¿Puedo obtener el tamaño de un campo de estructura sin crear una instancia de la estructura?
typedef struct Foo {
int bar;
bool baz;
} Foo;
// ...
Foo s;
StoreInSomething(s.bar, sizeof(s.bar)); // easy as pie
Ahora todavía se puede hacer algo como esto, pero con la interfaz estoy poniendo en práctica (I conseguir un BOOL que indica cuál debe ser el estado de un bit específico en un campo de bits), I Estaría creando la estructura únicamente para obtener el tamaño del miembro de datos. ¿Hay alguna manera de indicar al compilador que debe usar el tamaño del campo de una estructura sin crear una instancia de la estructura? Sería el equivalente filosófico de:
SetBit(bool val) {
StoreInSomething(
BITFIELD_POSITION_CONSTANT, // position of bit being set
val, // true = 1, false = 0
sizeof(Foo::bar)); // This is, of course, illegal. (The method I've been told I must use req's the size of the target field.)
}
Creación de la estructura en la pila debe ser rápido y barato, pero sospecho que me van a dinged para él en una revisión de código, por lo que estoy buscando una mejor manera que no introduce una carga de mantenimiento adicional (como #defines para tamaños).
interesante. Al darse cuenta de que el OP pregunta por C++, ¿hay alguna manera de hacerlo que también funcione en C? –
Siempre que 'Foo' sea predeterminado construible. De lo contrario, necesitarás algunos argumentos ficticios de constructor, o 'sizeof ((Foo *) 0) -> bar'. @Dan: la versión del puntero también funcionará en C. –
+1: mi cerebro acaba de explotar –