C++ Class Template Specialization

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.

  1. The two input index values,  and , correspond to green in the color enumeration and apple in the fruit enumeration. Thus, we print green apple.
  2. 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";
    }
};
Copied!

Leave a Reply

Your email address will not be published. Required fields are marked *