Es ist trivial, die Größe eines Feldes einer Struktur in C++ zu erhalten, wenn Sie eine Instanz der Struktur haben. Z.B. (Kompiliert):Kann ich die Größe eines Strukturfelds ohne das Erstellen einer Instanz der Struktur abrufen?
typedef struct Foo {
int bar;
bool baz;
} Foo;
// ...
Foo s;
StoreInSomething(s.bar, sizeof(s.bar)); // easy as pie
Jetzt kann ich noch etwas tun, aber mit der Schnittstelle ich bin Umsetzung (I ein BOOL erhalten, dass der Zustand eines bestimmten Bit zeigt an, was in einem Bitfeld sein soll), I würde die Struktur nur erstellen, um die Größe des Datenelements zu erhalten. Gibt es eine Möglichkeit, dem Compiler anzuzeigen, dass er die Größe des Felds einer Struktur verwenden soll, ohne eine Instanz der Struktur zu erstellen? Es wäre die philosophische Äquivalent:
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.)
}
Erstellen der Struktur auf dem Stapel sollte schnell und billig sein, aber ich vermute, ich werde in einem Code-Review für sie dinged bekommen, so dass ich bin auf der Suche nach einem besseren eine Art, die keine zusätzliche Wartungslast verursacht (wie #defines für Größen).
Interessant. In Anbetracht dessen, dass das OP nach C++ fragt, gibt es eine Möglichkeit, dies auch in C zu tun? –
Solange 'Foo' ist standardmäßig konstruierbar. Andernfalls benötigen Sie einige Dummy-Konstruktorargumente oder "sizeof ((Foo *) 0) -> bar". @Dan: Die Zeigerversion wird auch in C funktionieren. –
+1: mein Gehirn explodiert gerade –