I'm trying to come up with a better solution than the one shown below to match one data type to another. Frequently I see code such as below where a switch is done in order to match one type to another. The example shows two enums but they need not be.
Code:
#include <iostream>
using namespace std;
enum color
{
BLUE = 0,
RED,
GREEN,
YELLOW
};
enum object
{
APPLE = 0,
SKY,
FIRE,
SUN
};
object color_2_object(unsigned char color);
color object_2_color(unsigned char object);
int main(void)
{
object object1;
color color1;
cout << "Hello\n";
object1 = color_2_object(YELLOW);
cout << "color YELLOW matches object: " << object1 << "\n";
color1 = object_2_color(APPLE);
cout << "object APPLE matches color: " << color1 << "\n";
}
object color_2_object(unsigned char color)
{
object local_object = SKY;
switch(color)
{
case BLUE:
local_object = SKY;
break;
case RED:
local_object = FIRE;
break;
case GREEN:
local_object = APPLE;
break;
case YELLOW:
local_object = SUN;
break;
default:
break;
}
return local_object;
}
color object_2_color(unsigned char object)
{
color local_color = GREEN;
switch(object)
{
case APPLE:
local_color = GREEN;
break;
case SKY:
local_color = BLUE;
break;
case FIRE:
local_color = RED;
break;
case SUN:
local_color = YELLOW;
break;
default:
break;
}
return local_color;
}
I've also come across situations where 'just by chance' the two enums match up and therefore a simple = is used.
Code:
enum color
{
BLUE = 0,
RED,
GREEN,
YELLOW
};
enum object
{
SKY = 0,
FIRE,
APPLE,
YELLOW
};
color1 = (color)object1;
My concern is when or if one or both of the data types are changed. Multiple places (switches) must be changed and I'm trying to think of a good way to avoid this. Is the only solution to create these type of conversion or matching routines? I only tend to need to do the conversion once and therefore a procedure seems a little wasteful. However on the other hand there are many of these data types which I need to convert and I don't like adding many switches in the code.
I've used some simple c++ here so please excuse!
TIA