class Add
{
Add(){cout<<"ctor";}
void operator()(int a ,int b){return a+b;}
}
int main()
{
Add(3,4);
}
添加是函子。函子可以帮助回调机制吗?那么它发生在哪里?
函子可以帮助回调机制吗?
是的。您可以编写一个函数模板,它使用函子来执行用户定义的操作,作为它正在做的任何事情的一部分;例如:
template <typename Fn>
void do_stuff(Fn f, int a, int b) {
int c = f(a, b);
do_something(c);
}
然后注入你的操作:
do_stuff(Add(), 3, 4);
一种特定用途是std::sort
算法,它可以使用用户提供的仿函数来比较不支持正常比较运算符的类型。
那么它发生在哪里?
不是;您的代码无法编译。修复返回值后(因为它返回值 not void
),您可以创建并调用一个函数
Add()(3,4);
但这并不是特别有用。