假設我有一個函數模板,在主函數我寫了一行StrCompare
默認模板參數
template<typename T=NonCaseSenCompare>//NonCaseSenCompare is a user defined class look at the detailed code below.
int StrCompare(char* str1, char* str2)
{
...
}
現在
char* str1="Zia";
char* str2="zia";
int result=StrCompare(str1,str2);
它應該工作,因爲我們提供了一個默認的模板參數,但它不會
編譯器給出以下錯誤
沒有匹配函數調用`StrCompare(char * &,char * &) 「 現在詳細的代碼由
#include<iostream.h>
class CaseSenCompare
{
public:
static int isEqual(char x, char y)
{
return x==y;
}
};
class NonCaseSenCompare
{
public:
static int isEqual(char x,char y)
{
char char1=toupper(x);
char char2=toupper(y);
return char1==char2;
}
};
template<typename T=NonCaseSenCompare>
int StrCompare(char* str1, char* str2)
{
for(int i=0;i < strlen(str1)&& strlen(str2);i++)
{
if(!T::isEqual(str1[i],str2[i]))
return str1[i]-str2[i];
}
return strlen(str1)-strlen(str2);
}
main()
{
char* ptr1="Zia ur Rahman";
char* ptr2="zia ur Rahman";
int result=StrCompare(ptr1,ptr2);//compiler gives error on this line
cout<<result<<endl;
system("pause");
}
如果我寫
int result=StrCompare<>(ptr1,ptr2);
編譯器會發出相同的錯誤消息給出。
我不認爲我們將永遠擺脫了「乾草親愛的!」 :D – 2010-02-24 18:21:37
@哈桑:再看一遍。 – 2010-02-24 18:26:03