作者回复: 这个需要用到std::function,存储lambda表达式,比如 ~~~ map<int, function<void()>> funcs; funcs[1] = [](){...}; funcs[7] = [](){...}; funcs[42] = [](){...}; return funcs[x](); ~~~ 这样,就把switch/case语句转换成了function+lambda,让map替你自动switch。
作者回复: 对的,就是这个原因。
作者回复: 这个就是闭包最常用的场景之一了,把数据和逻辑打包传递。
作者回复: 这个方法不错,nice。
作者回复: 是的,一般来说函数名就相当于函数指针,但对于成员函数,就必须要加上&。 所以我习惯上总写&,看起来更清楚,也比较一致。
作者回复: lambda的一个最核心的特点是变量,是“一等公民”,可以嵌套定义,而函数不能做到,在函数里无法定义函数,所以只能用lambda来就地定义匿名函数。
作者回复: 目前的lambda是这样的,不过你可以不在[]里捕获,而是在函数参数里传递常量引用。
作者回复: 对,用lambda来封装小段代码,这就有点函数式编程的意思了。
作者回复: else/switch/case是我个人认为要极力避免的,它增加了代码的复杂度,分支太多导致逻辑不清。