Pokud jste vyhledali toto téma, jistě už znáte
switch a není třeba se tu o něm sáhodlouze rozepisovat.
Problémem u
switch v jazyce
C/C++ je fakt, že
nedokáže přepínat řetězce (umí to např.
C#).
Proto jsem napsal jednoduchou sadu maker a definicí:
RAW CODE |
#define SWITCH_OPEN(input) { const char * __switch_string__ = input; #define SWITCH_CASE_FIRST(value) if(__switch_string__ == value) { #define SWITCH_CASE(value) } else if(__switch_string__ == value) { #define SWITCH_DEFAULT } else { #define SWITCH_CLOSE }} |
Princip je vážně jednoduchý. V podstatě jde o sekvenci
if /
else if /
else.
Příklad použití (usage exaple):
RAW CODE |
SWITCH_OPEN("asdfgh") { SWITCH_CASE_FIRST("qwerty") std::cout << "First case...";
SWITCH_CASE("asdfgh") std::cout << "Second case...";
SWITCH_CASE("zxcvbnm") std::cout << "Third case...\n"; std::cout << "You can add "; std::cout << "more lines "; std::cout << "of source code.";
SWITCH_DEFAULT std::cout << "default"; } SWITCH_CLOSE; |
Jediným problémem je, že každý
case se de-facto automaticky
breakuje, protože při volání dalšího
case končí vnoření
if /
else if /
else. Proto nelze použít společný kód pro více
case (položek).