Jak zainicjować wartości następującej struktury w konstruktorze na zdefiniowane wartości?Jak zainicjować pole bitowe w konstruktorze
Oba pokazane na moim przykładzie kodu opcje wydają się być nieco brzydki ....
struct T_AnlagenInfo01
{
// Option A
T_AnlagenInfo01() : fReserve80_0(0), fReserve80_1(0),.... {};
// Option B
T_AnlagenInfo01()
{
memset(this, 0, sizeof(T_AnlagenInfo01));
}
unsigned long fReserve80_0 : 1;
unsigned long fReserve80_1 : 1;
unsigned long fReserve80_2 : 1;
unsigned long fReserve80_3 : 1;
unsigned long fReserve80_4 : 1;
unsigned long fReserve80_5 : 1;
unsigned long fReserve80_6 : 1;
unsigned long fReserve80_7 : 1;
unsigned long fReserve81_0 : 1; // 81
unsigned long fReserve81_1 : 1;
unsigned long fReserve81_2 : 1;
unsigned long fReserve81_3 : 1;
unsigned long fReserve81_4 : 1;
unsigned long fReserve81_5 : 1;
unsigned long fReserve81_6 : 1;
unsigned long fReserve81_7 : 1;
};
Uważaj z alternatywą 'memset', jeśli masz funkcje wirtualne w klasie, ponieważ spowoduje to również zastąpienie tabeli vtable. –
Straszne konwencje nazewnictwa. Dziedzictwo, jak sądzę? W każdym razie, 'fReserve80_0 (0)' jest standardowym sposobem, a właściwie mniej brzydkim i łatwiejszym w utrzymaniu i bardziej bezpiecznym w użyciu niż memset. –
@phresnel: Ooooh tak ... :-(Wcześniejszy kod, który przestał działać, gdy jest używany na nowej, szybszej maszynie –