我发现自己在两种最佳实践之间存在冲突,并且我想知道是否有一种方法可以兼顾两者。
我需要从选择的坐标系中获得输出,而我想做的是:
// PSEUDO-CODE
const my_class& loads_global();
const my_class& loads_local();
GetLoads(COORDINATES coordinates)
{
switch (coordinates)
{
case LOCAL:
const my_class& loads = loads_local();
break;
case GLOBAL:
const my_class& loads = loads_global();
break;
// etc.
}
loads.write();
}
const引用的使用对性能有好处(此代码称为“很多”),但如果是const,则无法在范围定界符(如switch语句或if语句(或确实是try语句)中设置)我以前想做)。
我可以把loads.write(); 语句在开关内,但实际上它不仅是一行,而且我讨厌重复代码。我还可以使用指针而不是引用(“ const my_class * const my_object”范例),但这确实使代码看起来比使用引用更混乱。
有没有一种方法可以在周围的代码中使用const引用,或者将其分配给我随后不会/无法修改的const变量?
如果您拥有C ++ 11,则可以使用lambda隐藏初始化:
GetLoads(COORDINATES coordinates)
{
const my_class& loads = [&]() -> const my_class& {
switch (coordinates)
{
case LOCAL:
return loads_local();
break;
case GLOBAL:
return loads_global();
break;
default:
throw something;
}
}(); // Note the call operator here!
loads.write();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句