C ++:使用一个参数接受任何函数的模板?

时间:2012-01-21 08:00:32

标签: c++ templates function-pointers

基本上,我希望能够将带有任何参数的function_A传递给T_function,以便T_function可以执行一些命令,然后调用传入的函数

这就是我提出的(这可能会使我的目标更加明确):

template <typename t_return, typename t_param>
void foo(t_return (*func)(t_param), t_param p)
{
    //do code
    func(p);
}

foo<void, int>(&someFunc, someInt);

上面的代码效果很好,但看起来很麻烦。我也不确定它是多么万无一失。有更多理解的人有改进吗? 我已经尝试在线查看,但事实证明它很难搜索。

1 个答案:

答案 0 :(得分:4)

您可以将整个函数类型设为模板参数。然后编译器可以使用输入参数推导出模板参数。

template <typename F, typename T>
void foo (F func, const T& p)
{
    // do code
    func(p);
}

foo(&someFunc, someInt);

这也有一个优点,即可以支持功能对象。 (这也是标准库(“STL”)支持将函数传递给算法的方式。)