2017-09-28 20 views
0

この質問の多くは現実世界で使うのは実用的ではありませんが、私は学習プロセスとしてこれをやっています。テンプレート関数をテンプレート関数に渡す

私は、ソートアルゴリズムの各タイプを文書化したプロジェクトを開始しており、効率的です。私は次のようにのようにC++でテンプレート関数として各ソートアルゴリズムを書いている:

template <class T> 
void bubble_sort(T arr[], int numItems) { 
    for (int i = 0; i < numItems; i++) { 
     for (int j = 0; j < numItems - i - 1; j++) { 
      if (arr[j] > arr[j + 1]) { 
       T temp = arr[j]; 
       arr[j] = arr[j + 1]; 
       arr[j + 1] = temp; 
      } 
     } 
    } 
} 

私は私のドライバプログラムは、データのいくつかのセットを介して、各アルゴリズムの効率をテストしたいとによって、もう少し私のプロセスを一般化したいです各ソートアルゴリズムをテストするテンプレート関数を作成しますが、どうやってそれを行うのか分かりません。私は考えているが、それは働いていないものをここにあります:

template<typename F, typename T> 
double test(F arr[], int numItems, T func) { 

    clock_t start, finish; 
    start = clock(); 
    T(arr, numItems); 
    finish = clock(); 

    return (double)(finish - start)/CLOCKS_PER_SEC; 

} 

テストの内容は重要ではありませんが、私はこのようなソート機能に渡すことができるようにしたい:

double duration = test<int>(arr, numItems, bubble_sort<int>); 

この機能を構築する上での助けとなるでしょう。

+0

として、test()内、func()を呼び出すことがあると?また、testの第3引数として 'std :: function 'を使うのはなぜですか? – patatahooligan

+0

機能はタイプではありません。しかし、あなたは簡単に静的関数を構造体に入れ、構造体の型を渡すことができます。次に、テンプレートクラス/関数でFoo :: bar()を呼び出すことができます。 – dgrat

答えて

0

私はあなたが

func(arr, numItems); 

の代わりに、正確に誤りは何

T(arr, numItems); 
関連する問題