這個問題在這里已經有了答案: 如何在模板引數串列中傳遞模板函式 2 個回答 4 小時前關閉。
考慮一下:
template <class T_arr, class T_func>
void iter(T_arr *arr, int len, T_func func)
{
for(int i = 0; i < len; i )
{
func(arr[i]);
}
}
void display(int a) {
std::cout << "Hello, your number is: " << a << std::endl;
}
int main(void)
{
int arr[] = {1, 2, 3};
iter(arr, 3, display);
return (0);
}
但是,如果我嘗試將顯示功能更改為模板,它會按預期作業:
template <class T>
void display(T a) {
std::cout << "Hello, your number is: " << a << std::endl;
}
它停止作業,我收到此錯誤:忽略候選模板:無法推斷模板引數“T_func”。
如何理解這一點?
uj5u.com熱心網友回復:
您需要明確指定模板引數display:
iter(arr, 3, display<int>);
或者iter取函式指標:
template <class T_arr>
void iter(T_arr *arr, int len, void (*func)(T_arr))
{
for(int i = 0; i < len; i )
{
func(arr[i]);
}
}
那么你也能
iter(arr, 3, display); // template argument gets deduced as int
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/390871.html
