【发布时间】:2012-04-21 14:35:31
【问题描述】:
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 函数以使用模板?
【问题讨论】:
-
C++ 没有泛型,它有模板。两者可能看起来相同,但它们的工作方式根本不同。
-
当我将
compare(T,T)更改为compare (const T &, const T &)并注释掉zamien行时编译了我的。至少当数字不同时,将zamien更改为std::swap会产生正确的结果。 -
@Jasper 但您使用模板进行通用编程:-)
-
我想。但是 C++ Templates 是一个可以举起汽车的丑陋的健美运动员,而泛型只是一个普通的乔,恰好擅长打扮......