Rahil
Rahil

Reputation: 33

Why the output of this program is not as expected

I separated pointer template from general template but the output does not as it should be.

 template <class T>
 class Test
 {
    private:
       T pvalue;
    public:
      Test(T invalue)
      {
          pvalue = invalue;
      }
      void display()
      {
         std::cout << pvalue << "\n" ;
      }
 };
 template <class T>
 class Test<T*>
 {
    private:
       T pvalue;
    public:
      Test(T invalue)
      {
          pvalue = new T(*invalue);
      }
      void display()
      {
         std::cout << pvalue << "\n" ;
      }
      ~Test()
      {
           delete pvalue;
      }
 };
 int main()
 {
   Test<int> testint(4);
   testint.display();

   char * temp = new char[10];
   sprintf(temp, "%s", "Rahil");
   Test<char*> testchar(temp);
 }
 

The Output is: 4 R

Upvotes: 1

Views: 58

Answers (1)

Farhad Sarvari
Farhad Sarvari

Reputation: 1081

Just add full specialization for char * as follow:

 template <>
 Test<char*>::Test(char * invalue)
 {
        int len = 0;
        while(invalue[len] != '\0')
        {
                len++;
        }
        pvalue = new char[++len];
        for(int cnt = 0; cnt < len; cnt++)
        {
                pvalue[cnt] = invalue[cnt];
        }
 };
 template<>
 Test<char*>::~Test()
 {
     delete[] pvalue;
 }

Upvotes: 1

Related Questions