c ++将指向模板函数的指针作为模板传递

c++ passing a pointer to a template function as template

我有这个 iter 函数,它接受一个指向 value_type 的指针、一个 size_type 和一个应该接受 [=17] 的函数指针 fun_type =]作为参数:

template <
    class value_type,
    class size_type,
    class fun_type
> void  iter(value_type *arr, size_type size, fun_type function)
{ while (size--) function(arr[size]); }

在我们有一个带有模板的函数之前它工作正常,比方说我们想使用这个函数:

template <
   class T
> void print(const T &value) { std::cout << value << std::endl; }

然后我们得到这个编译错误:

main.cpp:35:1: error: no matching function for call to 'iter'
iter( tab, 5, print );
^~~~
./iter.hpp:17:8: note: candidate template ignored: couldn't infer template argument 'fun_type'
> void  iter(value_type *arr, size_type size, fun_type function)
        ^
main.cpp:36:1: error: no matching function for call to 'iter'
iter( tab2, 5, print );
^~~~
./iter.hpp:17:8: note: candidate template ignored: couldn't infer template argument 'fun_type'
> void  iter(value_type *arr, size_type size, fun_type function)

无论模板和函数的 return 类型如何,我怎样才能让 fun_type 与每个函数一起工作?

您的 iter 函数模板的第三个模板参数需要一个 函数;但是print(就其本身而言)是不是函数——它是一个函数模板,编译器根本无法推断出模板参数是什么为了实际创建一个函数而使用……所以你需要告诉它!只需添加 tab array/pointer 的类型作为该模板参数:

int main()
{
    int tab[] = { 5,4,3,2,1 };
    iter(tab, 5, print<int>);
    return 0;
}