如何在不使用&的情况下传递函数

时间:2018-11-08 14:26:01

标签: c++

我经常在以下情况下编写代码。

我有一个(纯)函数f和另一个函数g,该函数经过模板化,因此它将一个可调用对象(例如与f相似的类型)作为参数。 / p>

现在f并不是很琐碎,而是几行,而且因为 是无状态的,我将f定义为普通函数。但是然后在传递f时,我不得不写&f,我真的不喜欢这种语法。

另一种方法是编写全局lambda或函子,以解决我的“&问题”。但是从语法上讲,我更喜欢普通功能...

有没有一种方法可以定义g,以便我可以将f作为常规函数传递而避免使用&

1 个答案:

答案 0 :(得分:2)

传递函数时,您不必显式获取函数的地址。例如,以下代码可以编译并运行:

template <typename F>
void foo(F f) { f(); }

void bar() { }

int main()
{
    foo(bar);
}

live example on wandbox.org