我经常在以下情况下编写代码。
我有一个(纯)函数f
和另一个函数g
,该函数经过模板化,因此它将一个可调用对象(例如与f
相似的类型)作为参数。 / p>
现在f
并不是很琐碎,而是几行,而且因为
是无状态的,我将f
定义为普通函数。但是然后在传递f
时,我不得不写&f
,我真的不喜欢这种语法。
另一种方法是编写全局lambda或函子,以解决我的“&问题”。但是从语法上讲,我更喜欢普通功能...
有没有一种方法可以定义g
,以便我可以将f
作为常规函数传递而避免使用&
?
答案 0 :(得分:2)
传递函数时,您不必显式获取函数的地址。例如,以下代码可以编译并运行:
template <typename F>
void foo(F f) { f(); }
void bar() { }
int main()
{
foo(bar);
}