To banalne, aby uzyskać rozmiar pola struct w C++, jeśli masz instancję struktury. Na przykład. (Nieskompilowany):Czy mogę uzyskać rozmiar pola strukturalnego bez tworzenia instancji struktury?
typedef struct Foo {
int bar;
bool baz;
} Foo;
// ...
Foo s;
StoreInSomething(s.bar, sizeof(s.bar)); // easy as pie
Teraz mogę jeszcze zrobić coś takiego, ale z interfejsem mam wykonawczego (dostaję BOOL, który wskazuje, jaki jest stan określonego bitu w bitfield powinno być), I d będzie tworzyć strukturę wyłącznie w celu uzyskania rozmiaru elementu danych. Czy istnieje sposób wskazania kompilatorowi, że powinien on używać rozmiaru pola struct bez tworzenia instancji struktury? Byłoby filozoficzny odpowiednik:
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.)
}
Tworzenie struct na stosie powinny być szybkie i tanie, ale podejrzewam, że będę się za nią w dinged przeglądu kodu, więc szukam lepszy sposób, który nie wprowadza dodatkowego obciążenia konserwacyjnego (takiego jak #defines dla rozmiarów).
interesujące. Zdając sobie sprawę, że OP pyta o C++, czy istnieje sposób na to, że działa również w C? –
Tak długo, jak 'Foo' jest domyślnie skonstruowane. W przeciwnym razie będziesz potrzebował trochę fałszywych argumentów konstruktora lub 'sizeof ((Foo *) 0) -> bar'. @Dan: Wersja wskaźnika działa również w języku C. –
+1: mój mózg właśnie eksplodował –