Stránka 1 z 1

C++ String Switch

PříspěvekNapsal: 15 leden 2013 23:49:07
od Wlezley
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).