使用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;
...
}
}();