| Topic: |
DEVELOP > c-Plus-Plus |
| User: |
"C++Liliput" |
| Date: |
17 Jan 2008 04:59:58 AM |
| Object: |
Function template specialization |
I have a template function of the type
template<typename T>
const T max(const T& a, const T& b)
{
return a > b ? a : b;
}
I provide a template specialization only for C strings as follows:
template<>
const char* max(const char*& a, const char*& b)
{ -------------------------------------------------------------------------------------------------
ERROR
return strcmp(a, b) > 0 ? a : b;
}
Now I have the following code in main:
const char* cstr1 = "STRING";
const char* cstr2 = "string";
const char* cstrMax = ::max(cstr1, cstr2);
when I compile this code on my Solaris machine, I keep getting the
error "Could not find a match for max<T>(const char*&, const char*&)"
at the line mentioned above (dotted line ending with ERROR).
Surprisingly when I change my template definition to the following,
everything compiles fine:
template<typename T>
T max(T& a, T& b)
{
return a > b ? a : b;
}
As you can see all I have done is remove the const keyword qualifying
the arguments and the return type. In the first case, I would assume
that the typename should evaluate to "char*" but that obviously does
not happen. In the second case, the typename obviously evaluates to
"const char*" and everything works fine. What is the reason that there
is a compilation error in the first case?
.
|
|
| User: "Michael DOUBEZ" |
|
| Title: Re: Function template specialization |
17 Jan 2008 05:18:29 AM |
|
|
C++Liliput a écrit :
I have a template function of the type
template<typename T>
const T max(const T& a, const T& b)
{
return a > b ? a : b;
}
I provide a template specialization only for C strings as follows:
template<>
const char* max(const char*& a, const char*& b)
{ -------------------------------------------------------------------------------------------------
ERROR
return strcmp(a, b) > 0 ? a : b;
}
Specialization of T=char* is
template<>
char* const max(char* const& a, char* const& b)
{
....
}
You should define
char const * const max(char const * const& a, char const * const& b)
{
....
}
.
|
|
|
|

|
Related Articles |
|
|