2012-04-21 9 views
1
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++で

bool cmp(const int a, const int b){ 
    return a <= b; 
} 

すべてうまく動作します。 テンプレートを使用するためにcmp関数を変更するにはどうすればよいですか? 「CMP」機能は、タイプの

bool compare(T,T) 

ですが:

+0

C++にはジェネリックがなく、テンプレートがあります。 2つは同じように見えるかもしれませんが、根本的に異なる方法で動作します。 – Jasper

+0

compare(T、T)を 'compare(const T&、const T&)'に変更し、 'zamien'行をコメントアウトしたときに、Mineがコンパイルされました。 'zamien'を' std :: swap'に変更すると、数字が少なくとも違っていたときに正しい結果が得られました。 – chris

+0

@ジャスパーしかし、あなたは一般的なプログラミングを行うためにテンプレートを使用します:-) – juanchopanza

答えて

2

問題はbubble_sortを期待は型である「比較」機能パラメータということで、それを修正するために

bool compare(const T&,const T&) 

「比較」パラメータのタイプを変更します。

template <class T> 
void bubble_sort(T tablica[], int size, bool compare(const T&,const T&)){ 
    /* ... */ 
} 
+0

私はまだそのエラーがあります: 'void bubble_sort(T []、int、bool (__cdecl *)(const T&、const T&)) ':バブルソート(タブ、サイズ、cmp)のように使用したいときに' T [] 'のテンプレート引数を' int [10] 'から推測できませんでした。ここで、tab [] = {0,1,2,3,4,5,6,7,8,9}となります。 –

+0

これは私のためにコンパイルされました:http://ideone.com/6b13z – mfontanini

+0

これは完璧に動作しますが、MS Visual 2010でコンパイルしようとするとエラーが発生します。 –

0

これは、

int (*cmp_int)(int,int) = compare<int>; 
bubble_sort(in, 5, cmp_int); 

これはMS Visualでうまくいくはずです。

関連する問題