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

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.
  3.  SOLUTIONS:
  4. #include <iostream>
    using namespace std;
    enum class Fruit { apple, orange, pear };
    enum class Color { red, green, orange };

    template <typename T> struct Traits;


    // Define specializations for the Traits class template here.
    char s []="unknown";
    char f0 []="apple";
    char f1 []="orange";
    char f2 []="pear";
    char c0 []="red";
    char c1 []="green";
    char c2 []="orange";
    template <>
    struct Traits<Fruit>
    {
        public:
        static char* name(int a)
        {
            if(a>=|| a<0)
                return s;
            else if (a==0)
                return f0;
            else if (a==1)
                return f1;
            else
                return f2;            
        }
    };

    template <>
    struct Traits<Color>
    {
        public:
        static char* name(int a)
        {
            if(a>=|| a<0)
                return s;
            else if (a==0)
                return c0;
            else if (a==1)
                return c1;
            else
                return c2;  
        }
    };



    int main()
    {
        int t = 0; std::cin >> t;

        for (int i=0; i!=t; ++i) {
            int index1; std::cin >> index1;
            int index2; std::cin >> index2;
            cout << Traits<Color>::name(index1) << " ";
            cout << Traits<Fruit>::name(index2) << "\n";
        }
    }

Comments

Popular posts from this blog

Valid Username Regular Expression

Java SHA-256

Java Interface