【发布时间】:2021-10-23 05:32:25
【问题描述】:
我有一个测试搜索方法的函数时间的工作实现,它需要:
checkSearchTime(T(*funcPointer) (T myArray[], int size, T wanted)
作为参数,我尝试用排序方法做同样的事情:
checkSortTime(T(*funcPointer) (T myArray[],int size)
我得到一个错误。这是错误:
Error C2664 'void checkSortTime<int>(T (__cdecl *)(T [],int),T [],int)': cannot convert argument 1 from 'void (__cdecl *)(T [],int)' to 'T (__cdecl *)(T [],int)'
这是两个文件的代码:
int main() {
memLeaks();
constexpr auto SIZE = 5;
int myArray[SIZE];
populateArrayRandom(myArray, SIZE);
PrintArray(myArray, SIZE);
//insertionSort(myArray, SIZE);
PrintArray(myArray, SIZE);
checkSearchTime(binary_search, myArray, SIZE, 12);
checkSortTime(selectionSort, myArray, SIZE); // THIS IS WHERE THE ERROR IS
//checkAllSorts(myArray, SIZE); // WOULD LIKE TO CALL THIS AFTER
}
template<typename T>
void checkSearchTime(T(*funcPointer) (T myArray[], int size, T wanted),
T arrayArgument[], int sizeArgument, T wantedArgument) {
// Use auto keyword to avoid typing long
auto start = std::chrono::high_resolution_clock::now();
funcPointer(arrayArgument, sizeArgument, wantedArgument);
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
//std::cout << "Microseconds: " << duration.count() << std::endl;
std::cout << "[" << duration.count() << "] Nanoseconds" << std::endl;
}
template<typename T>
void checkAllSearches(T myArray[], int size, T value) {
std::cout << "Search Implementations and Timing\n";
std::cout << "Binary=";
checkSearchTime(binary_search, myArray, size, value);
std::cout << "Linear=";
checkSearchTime(linear_search, myArray, size, value);
std::cout << "JumpSearch=";
checkSearchTime(jump_search, myArray, size, value);
std::cout << "Exponential=";
checkSearchTime(exponential_search, myArray, size, value);
std::cout << "FibMonaccian=";
checkSearchTime(fibMonaccian_search, myArray, size, value);
}
template<typename T>
void checkSortTime(T(*funcPointer) (T myArray[],int size), //tried const here, doesn't work either
T arrayArgument[], int sizeArgument) {
// Use auto keyword to avoid typing long
auto start = std::chrono::high_resolution_clock::now();
funcPointer(arrayArgument, sizeArgument);
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
//std::cout << "Microseconds: " << duration.count() << std::endl;
std::cout << "[" << duration.count() << "] Nanoseconds" << std::endl;
}
【问题讨论】: