Isaac Isaac - 28 days ago 8
C++ Question

String pre-definition in .h file and using it to filter user input

Consider the following situation:

#define YES "y"||"Y"||"yes"||"Yes"||"YES"
#define NO "n"||"N"||"no"||"No"||"NO"


With macros being used at the user input.

FRW::writeLine(PLAY_AGAIN);
latestResponse = FRW::getUserInput();
if (latestResponse == YES)
{
retry = false;
}
else if (latestResponse == NO)
{
retry = true;
}


I am aware that this is wrong and I should actually use...

#define YES latestResponse == "y"|| latestResponse == "Y"|| latestResponse == "yes"|| latestResponse == "Yes"|| latestResponse == "YES"


... and checking as

if (latestResponse == YES)
{
retry = false;
}
else if (latestResponse == NO)
{
retry = true;
}


Please, can somebody recommend any other way of implementing string macros?
Or should I stay this way?

Answer

There's no benefit in using macros this way.

You should rather ask, what is the proper abstraction here? In this case it could be

bool is_yes(const std::string &response) {
    return response == "y" || response == "yes" || ...;
}

bool is_no(const std::string &response) {
     // ...
}

and then using this in your code.

Comments