[英]How to pass a void function as a parameter c++?
我正在嘗試將 function 作為參數傳遞。 在這里,我創建了一個sortingRunTime()
,它接受一個數組和一個 function 作為參數並打印出執行時間。
void sortingRunTime(int* arr, void(*functiontocall)(int* arr))
{
clock_t t = clock();
(*functiontocall)(arr);
t = clock() - t;
cout << (t / (float)CLOCKS_PER_SEC);
}
我還有另一個 function void bubblesort(int* arr)
,它對數組進行排序並且不返回任何內容。 此外,我還有其他類型為 void 的排序函數,我必須對所有排序函數使用sortingRunTime()
。 在主要的 function 中,我有
sortingRunTime(arr, bubblesort(arr));
但它給出了錯誤消息““void”類型的參數與“void (*)(int *arr)”類型的參數不兼容”。 我該如何解決?
您需要傳遞 function 本身而不是 function 調用的結果。
所以而不是
sortingRunTime(arr, bubblesort(arr));
實際上對調用進行評估
sortingRunTime(arr, void);
這是不正確的,沒有意義你需要寫
sortingRunTime(arr, bubblesort);
在 function 排序運行時間中,調用sortingRunTime
更簡單
functiontocall(arr);
注意這些 function 聲明
void sortingRunTime(int*, void(*functiontocall)(int* ));
和
void sortingRunTime(int*, void functiontocall(int * ) );
是等效的並聲明相同的 function。
為了在這些電話之間有所區別
sortingRunTime(arr, bubblesort(arr));
和
sortingRunTime(arr, bubblesort);
更明顯考慮以下演示程序。
#include <iostream>
#include <iomanip>
#include <type_traits>
void bubblesort( int * );
int main()
{
int a[10];
std::cout << std::boolalpha
<< std::is_same<void, decltype( bubblesort( a ) )>::value
<< '\n';
std::cout << std::boolalpha
<< std::is_same<void( int * ), decltype( bubblesort )>::value
<< '\n';
return 0;
}
程序 output 是
true
true
可以看出,表達式bubblesort( a )
的類型是void
,而表達式bubblesort
的類型是function 類型void( int * )
。 用作 function 參數的此表達式(函數指示符)被隱式轉換為指向void ( * )( int * )
類型的 function 的指針。
如果您調用返回 void 的 function,則 function 調用的結果為 void,並且您不能將該 void 作為參數傳遞給sortingRunTime
。
sortingRunTime
需要一個(指向)function 作為參數的(指針)。 因此,與其傳遞 function 調用的結果,不如傳遞(指向)function 本身的結果:
sortingRunTime(arr, &bubblesort);
由於 function 隱式轉換為指向自身的指針,因此 addressof 運算符的使用是可選的。 沒有它,它的工作原理相同:
sortingRunTime(arr, bubblesort);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.