如何在 C++ 中将模板函数作为参数传递?
How to pass a template function as an argument in C++?
考虑一下:
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'。
如何理解这一点?
您需要明确指定 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
考虑一下:
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'。
如何理解这一点?
您需要明确指定 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