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;
}
}
}
}
它不起作用,我有错误:
'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函数以使用模板?
答案 0 :(得分:2)
问题是bubble_sort
期望的“compare”函数参数是类型:
bool compare(T,T)
虽然“cmp”函数的类型为:
bool compare(const T&,const T&)
要修复它,请修改“compare”参数的类型:
template <class T>
void bubble_sort(T tablica[], int size, bool compare(const T&,const T&)){
/* ... */
}
答案 1 :(得分:0)
这就是我处理这个问题的方法:
int (*cmp_int)(int,int) = compare<int>;
bubble_sort(in, 5, cmp_int);
现在它应该可以在MS Visual中正常工作。