使用lambda表达式消除多重初始化路径

Obj obj;
switch (init_mode) {
case mode1:
    obj = Obj(...);
    break;
case mode2:
    obj = Obj(...);
    break;
...
}

上述代码要求:

  • Obj类型支持默认初始化
  • Obj类型支持赋值
  • 如果要获得较好的性能,Obj类型需要移动友好

可用如下lambda表达式消减:

auto obj = [&] {
    switch (init_mode) {
    case mode1:
        return Obj(...);
        break;
    case mode2:
        return Obj(...);
        break;
    ...
    }
}();