利用C++ Lambda优化多分支赋值
我们经常需要根据不同的条件分枝来获取一个变量一共后续使用,
- 通常我们会这么做。
//...
Type res;
switch (val) {
case val0: res = Type(...); break;
case val1: res = Type(...); break;
case val2: res = Type(...); break;
case val3: res = Type(...); break;
..
}
...
...
//...
上述代码需要执行一次默认构造,一次赋值,效率不高,就算有move-assignment的加持,其对默认构造的要求也是一个包袱,对于不支持默认构造的类型很难以此形式解决需求。
- 那么,如果把上述代码写成一个函数,直接在对应的分支return对应的对象,在结合C++2.0的编译器对return-by-value的优化,再结合使用inline关键字,也可以实现较好的效果,当然要多写一个函数,如果仅是用一次,或是这样的需求有很多(要写很多函数),很麻烦,也有点不利于代码组织。结合这个利用函数返回值的思路,借助Lambda表达式便可以灵活的解决这个问题。
//...
Type res = [&val] {
switch (val) {
case val0: return Type(...); break;
case val1: return Type(...); break;
case val2: return Type(...); break;
case val3: return Type(...); break;
..
}
}();
...
...
//...