Reputation: 33
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
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