2016-04-26 25 views
0

folgendes Beispiel:Position des Elements bei der Kompilierung

struct mystruct 
{ 
    int a; 
    int b; 
    int c; 
}; 

int main() 
{ 
    mystruct x; 

    std :: cout << reinterpret_cast <size_t> (&(x.b)) - reinterpret_cast <size_t> (&x) << std :: endl; 
} 

Was die oben tut, ist reinterpret_cast s zu verwenden, um die Position des Elements b im Speicher innerhalb der Struktur mystruct zu bestimmen. Auf meinem System (und, ich denke, auf jedem vernünftigen System) liefert das obige 4.

Nun, was ich brauche, ist genau dasselbe zu tun, aber zur Kompilierzeit. Gibt es eine Möglichkeit, so etwas zu tun? Was ich brauche, ist einige static constexpr size_t, dass zur Kompilierzeit wird mir sagen, was die Position b innerhalb mystruct ist.

Antwort

2

Sie können das tun, mit offsetof macro:

size_t constexpr b_offset = offsetof(mystruct, b); 

Beachten Sie, dass Sie nicht offsetof außerhalb von Funktionen in der gleichen Klassendefinition, da diese Klasse unvollständig ist noch verwenden können.

Verwandte Themen