2012-06-25 3 views
1

Если есть если блок, как этотУсловный если с ИЛИ проверки всех условий

if(foo() || foo2() || foo3()) 
{ 
//do some things 
} 

мне нужна только одна функция Foo вернуть истинный выполнить этот код. Но я должен назвать их всех. Проблема начинается, когда первый foo возвращает true. Таким образом, остальные foos (foo2 и foo3) не вызываются.

Я знаю, что я могу сделать это так:

bool foo1 = foo1(); 
bool foo2 = foo2(); 
bool foo3 = foo3(); 

if(foo1 || foo2 || foo3) {} 

Но у меня есть 18 функции Foo, и это в нескольких частях моего кода. Есть ли какой-нибудь трюк, чтобы сделать это коротким и легким?

ответ

9

Оператор || является коротким замыканием. Вы можете использовать вместо |:

if (foo1() | foo2() | foo3()) {} 

Но вы должны также рассмотреть возможность сделать массив указателей на функции и вызывая их в петлю.

и это в нескольких частях моего кода

Вы должны реорганизовать свой код, так что вы можете использовать его, а не копировать и вставлять один и тот же код во многих местах.

+0

'|' будет работать только в том случае, если возвращаемые значения являются неотъемлемыми Они, возможно, были указатели –

+0

@rob:.. I «Предположим, что они возвращают логические значения, потому что OP говорит« возвращает true ». –

+3

-1 Это действительно хакерский и запутанный способ избежать использования трех переменных: –

2

Мне нужна только одна функция foo, чтобы вернуть true для выполнения этого кода. Но я должен назвать их всех. Проблема начинается, когда первый foo возвращает true. Таким образом, остальные foos (foo2 и foo3) не вызываются.

Хорошо, если вам нужно вызвать каждую функцию, тогда вы должны позвонить им. Действительно, просто позвоните им и сохраните результаты.

Но у меня есть 18 функций foo, и это в нескольких частях моего кода. Есть ли трюк, чтобы сделать это коротким и легким?

Почему у вас есть 18 функций для вызова и испытания в одном заявлении if? Должен быть лучший способ решить проблему. Таким образом, каждая функция имеет побочные эффекты, и вам нужно, чтобы это происходило, здорово, но это уже похоже на проблему.

Я не знаю, в чем проблема, которую вы пытаетесь решить, и я не знаю, что делает каждая функция, но мне очень тяжело полагать, что ваша текущая настройка находится в оптимальном положении.

1

Как насчет суммирования функций вверх? (только хорошо работает, если функции независимы и могут возвращать положительный Int или указатель;

int resultSum = func1() + func2() + func3(); 


if(resultSum>0){ 
//do things 
} 
Смежные вопросы