假设我有以下想要重构的代码:
int toFuture()
{
precalc();
int calc = 5 * foobar_x() + 3;
postcalc();
return calc;
}
int toPast()
{
precalc();
int calc = 5 * foobar_y() - 9;
postcalc();
return calc;
}
在经典-C中,我会将这段代码重构为一个worker(),它接受一个执行计算的函数指针:worker()中的通用代码,函数指针提供的特定代码。
对于 C++11,我应该改用 lambda 吗?如果是这样,在这种情况下我将如何实现它?
编辑:我突然想到模板也可以工作。模板实现与其他两个实现相比如何?
最佳答案
一种方法:
template<typename CalcFuncT>
int perform_calc(CalcFuncT&& calcfunc)
{
precalc();
int const calc = std::forward<CalcFuncT>(calcfunc)();
postcalc();
return calc;
}
int main()
{
perform_calc([]{ return 5 * foobar_x() + 3; }); // toFuture
perform_calc([]{ return 5 * foobar_y() - 9; }); // toPast
}
关于c++ - 回调与 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7828675/