Re: Explicit specialization [ Template ]
On Jul 20, 8:59 pm, AY <techreposit...@gmail.com> wrote:
Hi there,
I'm trying to Override a generic version of swapvalue for char. But it
still call's the generic version. Here is the sample code -
template<typename T>
void swapvalues(T& src, T& dest)
{
T temp;
temp = src;
src = dest;
dest = temp;
cout<<"Inside swapvalue [template]"<<endl;
}
// Override of generic version.
void swapvalues(char& src, char& dest)
{
/*
char* temp = NULL;
*temp = src;
src = dest;
dest = *temp;
*/
cout<<"Inside swapvalue [char]"<<endl;
cout<<"src = "<<src<<" : dest = "<<dest<<endl;
}
int main()
{
int i=5, j = 7;
char* srcCh = "ABC";
char* destCh = "XYZ";
swapvalues(srcCh, destCh); // Template version is called, despite
address being passed.
// Isn't this the correct way of passing char* to char& ?
//swapvalues(*srcCh, *destCh); // Rt way of calling
cout<<srcCh<<" : "<<destCh<<endl;
return 0;
}
I thought this was the correct way of assigning char* to char&.
char* srcCh = "ABC"
char& refCh = *srcCh; // OK ! Reference is pointing to "ABC";
You need to understand that char* is a pointer to a single
character. Not
an string, not an array, a SINGLE CHAR.
Similarly char& is a reference to a single char.
Pointers and references are distinct objects.
This is C++, you want strings use std::string.
You tell me what you the swapvalues specialization is supposed to do?
Are you just intending to move the pointers?, then you want refernce
to pointer (char *&) as arguments.
If you want to swap the strings...well you can't do that. You do know
that those arrays are const?
Specializing the template doesn't have the format you provided, not
that you got that far.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]