将模板函数传递给模板函数

时间:2017-09-28 00:37:00

标签: c++ algorithm sorting templates

很多这个问题在现实世界中使用可能是不切实际的,但我将此作为一个学习过程。

我已经开始了一个记录每种排序算法及其效率的项目。我一直在用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>);

建立此功能的任何帮助都会更好;

1 个答案:

答案 0 :(得分:0)

我想你必须在func()内拨打test(),作为

func(arr, numItems);

而不是

T(arr, numItems);