首页 > 解决方案 > 为什么这个程序的输出不符合预期

问题描述

我将指针模板与通用模板分开,但输出不是应有的。

 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

标签: c++

解决方案


只需为 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;
 }

推荐阅读