我把指针模板和一般模板分开了,但是输出并不像它应该的那样。
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
只需为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;
}