假设我有以下代码想要重构:
int toFuture()
{
precalc();
int calc = 5 * foobar_x() + 3;
postcalc();
return calc;
}
int toPast()
{
precalc();
int calc = 5 * foobar_y() - 9;
postcalc();
return calc;
}
在classic-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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)