提问者:小点点

为什么这个程序的输出不是预期的


我把指针模板和一般模板分开了,但是输出并不像它应该的那样。

 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);
 }
 

输出为:4 R


共1个答案

匿名用户

只需为char*添加完全专门化,如下所示:

 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;
 }