I am facing the following problem. Supposing I have two (or more) enum classes like these:
enum class CURSOR { ON, OFF };
enum class ANSI { ON, OFF };
I am trying to implement a (template) function called OPTION able to do something like this:
OPTION( CURSOR::ON );
OPTION( ANSI::ON );
I tried implementing it in this way:
template <typename T>
inline void OPTION( const T& opt )
{
if( opt == CURSOR::ON ) //do something...;
else if( opt == CURSOR::OFF ) //do something...;
else if( opt == ANSI::ON ) //do something...;
else if( opt == ANSI::OFF ) //do something...;
}
But it gives me the following error if I try to compile the two previously defined lines of code:
examples/../include/manipulators/csmanip.hpp: In instantiation of 'void osm::OPTION(const T&) [with T = CURSOR]':
examples/manipulators.cpp:190:14: required from here
examples/../include/manipulators/csmanip.hpp:88:18: error: no match for 'operator==' (operand types are 'const osm::CURSOR' and 'osm::ANSI')
88 | else if( opt == ANSI::ON ) enableANSI();
| ~~~~^~~~~~~~~~~
examples/../include/manipulators/csmanip.hpp:88:18: note: candidate: 'operator==(osm::ANSI, osm::ANSI)' (built-in)
examples/../include/manipulators/csmanip.hpp:88:18: note: no known conversion for argument 1 from 'const osm::CURSOR' to 'osm::ANSI'
examples/../include/manipulators/csmanip.hpp:88:18: note: candidate: 'operator==(osm::CURSOR, osm::CURSOR)' (built-in)
examples/../include/manipulators/csmanip.hpp:88:18: note: no known conversion for argument 2 from 'osm::ANSI' to 'osm::CURSOR'
examples/../include/manipulators/csmanip.hpp:89:18: error: no match for 'operator==' (operand types are 'const osm::CURSOR' and 'osm::ANSI')
89 | else if( opt == ANSI::OFF ) disableANSI();
Please ignore the fact that I defined them in a namespace osm in my code.
Do you know what is the problem and if you know how to build a function which works for this task? Thanks.