关于模板显式特化的有关问题
关于模板显式特化的问题
做一个函数模板,输出一个数组中,某个值出现的次数,
// template.h
template <class T>
int count(T *arr, int size, T value)
{
int n = 0;
for (int i = 0; i < size; ++i)
{
if (arr[i] == value)
n++;
}
return n;
}
typedef const char * STR;
template <> int count <STR> (STR str_arr[], int size, STR str) // <1>
{
int n = 0;
for (int i = 0; i < size; ++i)
{
if ( strcmp(str_arr[i], str) == 0)
n++;
}
return n;
}
// use.cpp
char *sarr[5] =
{
"aaa ",
"bbb ",
"aaa ",
"ccc ",
"ddd "
};
int n;
n = count(sarr, 5, "ccc "); // <2>
cout < < "int sarr, \ "ccc\ " appears " < < n < < " times " < < endl;
------------------------------
出错信息是:
<2> error C2782: 'int count(T *,int,T) ' : template parameter 'T ' is ambiguous
<1> see declaration of 'count ' could be 'const char * ' or 'char * '
---------
编译环境: win xp
vs2005;
------------
不知道是哪里出了问题,知道的朋友说一下呵...谢谢
------解决方案--------------------
char *sarr[5]
====================>
const char *sarr[5]
------解决方案--------------------
char *sarr[5] = 改成
const char *sarr[5] =
------解决方案--------------------
n = count(sarr, 5, "ccc ");
根据sarr来推断, T 是char *, 根据第三个参数来推断,T是const char *,所以多义了
------解决方案--------------------
"ccc "的类型是char [4],最多自动转换到const char *
做一个函数模板,输出一个数组中,某个值出现的次数,
// template.h
template <class T>
int count(T *arr, int size, T value)
{
int n = 0;
for (int i = 0; i < size; ++i)
{
if (arr[i] == value)
n++;
}
return n;
}
typedef const char * STR;
template <> int count <STR> (STR str_arr[], int size, STR str) // <1>
{
int n = 0;
for (int i = 0; i < size; ++i)
{
if ( strcmp(str_arr[i], str) == 0)
n++;
}
return n;
}
// use.cpp
char *sarr[5] =
{
"aaa ",
"bbb ",
"aaa ",
"ccc ",
"ddd "
};
int n;
n = count(sarr, 5, "ccc "); // <2>
cout < < "int sarr, \ "ccc\ " appears " < < n < < " times " < < endl;
------------------------------
出错信息是:
<2> error C2782: 'int count(T *,int,T) ' : template parameter 'T ' is ambiguous
<1> see declaration of 'count ' could be 'const char * ' or 'char * '
---------
编译环境: win xp
vs2005;
------------
不知道是哪里出了问题,知道的朋友说一下呵...谢谢
------解决方案--------------------
char *sarr[5]
====================>
const char *sarr[5]
------解决方案--------------------
char *sarr[5] = 改成
const char *sarr[5] =
------解决方案--------------------
n = count(sarr, 5, "ccc ");
根据sarr来推断, T 是char *, 根据第三个参数来推断,T是const char *,所以多义了
------解决方案--------------------
"ccc "的类型是char [4],最多自动转换到const char *