Переключатель операторов Fallthrough - PullRequest
1 голос
/ 09 января 2020

Я работаю над raytracer и пытаюсь реализовать выборку. Теперь у меня есть enum, представляющий тип выборки, для простоты давайте назовем их «Один», «Два», «Три». Теперь «Один» и «Два» не зависят друг от друга, но если что-то требует выборки типа «Три», тогда должен выполняться код для «Один» и «Два». Прямо сейчас я делаю это:

bool flag = false;
switch(type) {
case Three: flag = true;
case One: 
// ...
if(!flag) break;
case Two:
// ...
break;
}

Есть ли «хитрый» способ сделать это без логического выражения? Я мог бы подумать о том, чтобы поместить код для «One» и «Two» в отдельные функции и вызвать оба в случае «Three», но я не хочу, чтобы вызовы функций были там, так как это вызывается> много <. Встраивание функций было бы другим вариантом, но это привело бы к дублированию кода. </p>

1 Ответ

1 голос
/ 09 января 2020

Я был слишком сосредоточен на попытках заставить его работать как переключатель, но, как указал @NathanOliver, это так же просто, как

if(type==One || type == Three) {
// case One
}
if(type==Two || type == Three) {
// case Two
}
...