[C++] Operator | w argumentach funkcji
Ostatnio zmodyfikowano 2012-11-14 12:10
starter Temat założony przez niniejszego użytkownika |
[C++] Operator | w argumentach funkcji » 2012-11-06 15:56:41 Mam pytanie, jak używać operatora | w argumentach funkcji? Mam załóżmy funkcje CreateWindow( std::string text, Keys key_conf ); i typ wyliczeniowy enum enum Keys { OK, Cancel, Info };
Jak obsłużyć wywołanie CreateWindow( "Blad", OK | Cancel ); ? Dziekuje za pomoc :) |
|
xevuel |
» 2012-11-06 16:00:53 #define num1 1 #define num2 2
void func( int args ) { if(( args & num1 ) == num1 ) cout << "Przekazano wartosc num1\n"; if(( args & num2 ) == num2 ) cout << "Przekazano wartosc num2\n"; }
int main( int argc, char ** argv ) { func( num1 | num2 ); func( num2 ); }
|
|
akwes |
» 2012-11-06 16:01:14 No a jak działa operator bitowy?
Zastanów się jak wykombinować wartości enumów żeby po operacji alternatywy bitowej np.
0000 0001 1(2) 0000 0010 2(2) --------- | 0000 0011 3(2)
wyszedł trzeci stan :P
|
|
kubawal |
» 2012-11-06 16:24:42 Skorzystaj z wartości szesnastkowych. Skoro: To można napisać na przykład tak: enum Flagi_drukarki { stan_dobry = 0x0, brak_farby_czarnej = 0x1, brak_farby_bialej = 0x2, brak_papieru = 0x4 };
if( get_flags() ==( brak_farby_czarnej | brak_farby_bialej ) { wyswietl_blad(); }
Flagi_drukarki f() { _Driver * ptr = reinterpret_cast < _Driver *>( ADRES ); Flagi_drukarki fl; if( 0xffb & ptr ) { fl |= brak_papieru; } if( 0xf0c & ptr ) { fl |= brak_farby_czarnej; } }
Żadne bity wyliczenia Flagi_drukarki się nie pokrywają |
|
starter Temat założony przez niniejszego użytkownika |
» 2012-11-14 12:10:08 Pokombinowałem i znalazłem :) Każda kolejna wartość enuma musi być potęgą dwójki i wtedy nic się nie pokryje :) |
|
« 1 » |