How about a templated class for perfect hashing instead:

Something like a customizable string enumeration.

 

You parametrize the class with the possible values.

The class has member functions for reading or for hashing string values with and without guarantee/check that it is one of the predefined values.

It also has the reverse function of returning the string for a hash.

The class can create a hash value even during compile-time.

Then it can be used for the existing switch case or for parsing.