template <class T>
bool cmp(const T &a, const T &b){
return a <= b;
}
template <class T>
void bubble_sort(T tablica[], int size, bool compare(T,T)){
bool change = true;
while(change){
change = false;
for(int i=0; i < size-1; ++i){
if(compare(tablica[i+1], tablica[i])){
zamien(tablica[i+1], tablica[i]);
change = true;
}
}
}
}
它不工作,我有錯誤:排序與自己的模板陣列,C++比較功能
'void bubble_sort(T [],int,bool (__cdecl *)(T,T))' :
could not deduce template argument for 'T []' from 'int [10]'
'void bubble_sort(T [],int,bool (__cdecl *)(T,T))' :
cannot use function template 'bool cmp(const T,const T)' as a function argument'
但是當我更換一個CMP功能:
bool cmp(const int a, const int b){
return a <= b;
}
一切正常。 如何更改我的cmp函數以使用模板?
C++沒有泛型,它有模板。這兩者可能看起來一樣,但他們的工作方式根本不同。 – Jasper 2012-04-21 14:36:55
當我將'compare(T,T)'改爲'compare(const T&,const T&)'並將'zamien'行註釋掉時編譯。至少當數字不同時,將'zamien'改爲'std :: swap'會產生正確的結果。 – chris 2012-04-21 14:40:34
@Jasper,但你使用模板來做泛型編程:-) – juanchopanza 2012-04-21 14:44:39