Evaluate a string with a switch in C++

The Solution to Evaluate a string with a switch in C++ is

As said before, switch can be used only with integer values. So, you just need to convert your "case" values to integer. You can achieve it by using constexpr from c++11, thus some calls of constexpr functions can be calculated in compile time.

something like that...

switch (str2int(s))
  case str2int("Value1"):
  case str2int("Value2"):

where str2int is like (implementation from here):

constexpr unsigned int str2int(const char* str, int h = 0)
    return !str[h] ? 5381 : (str2int(str, h+1) * 33) ^ str[h];

Another example, the next function can be calculated in compile time:

constexpr int factorial(int n)
    return n <= 1 ? 1 : (n * factorial(n-1));

int f5{factorial(5)};
// Compiler will run factorial(5) 
// and f5 will be initialized by this value. 
// so programm instead of wasting time for running function, 
// just will put the precalculated constant to f5 

~ Answered on 2013-05-05 20:06:01

Most Viewed Questions: