如何以 if else 或切换大小写格式对自动和编码?

How to code the auto& in a if else or switch case format?

本文关键字:格式 编码 大小写 if else      更新时间:2023-10-16

我曾经有一个代码来提取某些部分

auto& c = m_matrix[name];
....large block of code with using c in the calculation...

现在我必须使用 if/else 或切换大小写来m_matrix选项,如以下语句:

switch input{
case 1:
auto& c = A[name];
case 2:
auto& c = B[name];
}
....large block of code with using c in the calculation...

A 和 B 具有相同类型的元素。但是,这是错误的,因为它将显示c的定义是重复的。同时,我不能声明自动和c;在开关/机箱之前,如下所示:

auto& c;
switch input {
case 1:
c = A[name];
case 2:
c = B[name];
}
....large block of code with using c in the calculation...

有没有办法解决这个问题?

更新:CinCout - 恢复莫妮卡善意地提供了一个解决方案

switch input {
case 1:{
auto& c = A[name];
....large block of code with using c in the calculation...
}
case 2:{
auto& c = B[name];
....large block of code with using c in the calculation...
}
}

有没有办法避免每种情况下的重复代码?谢谢

只需为每个case提供一个自己的作用域,有效地为每个c提供一个局部作用域:

switch input
{
case 1:
{
auto& c = A[name];
…
break;
}
case 2:
{
auto& c = B[name];
…
break;
}
}

您可以使用函数或 lambda:

auto get_c = [&] -> decltype(A[name])& {
switch (input) {
case 1:
return A[name];
case 2:
return B[name];
}
return A[name];    // default case
};
auto& c = getC();
....large block of code with using c in the calculation...