You are given a main function which reads the enumeration values for two different types as input, then prints out the corresponding enumeration names. Write a class template that can provide the names of the enumeration values for both types. If the enumeration value is not valid, then print unknown
.
Input Format
The first line contains , the number of test cases.
Each of the subsequent lines contains two space-separated integers. The first integer is a color value, , and the second integer is a fruit value, .
Constraints
- 1 ≤ t ≤ 100
- -2 x 109 ≤ c ≤ 2 x 109
- -2 x 109 ≤ f ≤ 2 x 109
Output Format
The locked stub code in your editor prints lines containing the color name and the fruit name corresponding to the input enumeration index.
Sample Input
2
1 0
3 3
Sample Output
green apple
unknown unknown
Explanation
Since , there are two lines of output.
- The two input index values, and , correspond to green in the color enumeration and apple in the fruit enumeration. Thus, we print
green apple
. - The two input values, and , are outside of the range of our enums. Thus, we print
unknown unknown
.
Solution Implementation
/// (skeliton_head) ----------------------------------------------------------------------
// Define specializations for the Traits class template here.
template<>
struct Traits<Color>
{
public:
static string name(int i)
{
if (i == (int) Color::red) return "red";
if (i == (int) Color::green) return "green";
if (i == (int) Color::orange) return "orange";
return "unknown";
}
};
template<>
struct Traits<Fruit>
{
public:
static string name(int i)
{
if (i == (int) Fruit::apple) return "apple";
if (i == (int) Fruit::orange) return "orange";
if (i == (int) Fruit::pear) return "pear";
return "unknown";
}
};