1

そのようなブロックがあれば

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

そのコードを実行するためにtrueを返すのに必要なfoo関数は1つだけです。しかし、私はそれらすべてを呼び出さなければなりません。最初のfooがtrueを返すと問題が始まります。このようにして、残りのfoo(foo2とfoo3)は呼び出されません。

私はそれがそのようにできることを知っています:

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

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

しかし、私には18個のfoo関数があり、これは私のコードのいくつかの部分にあります。短くて簡単にするためのトリックはありますか?

4

3 に答える 3

9

||オペレーターが短絡しています。代わりに使用できます|

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

ただし、関数ポインターの配列を作成し、それらをループで呼び出すことも検討する必要があります。

これは私のコードのいくつかの部分にあります

多くの場所で同じコードをコピーして貼り付けるのではなく、コードを再利用できるようにコードをリファクタリングする必要があります。

于 2012-06-25T21:47:20.740 に答える
2

そのコードを実行するためにtrueを返すのに必要なfoo関数は1つだけです。しかし、私はそれらすべてを呼び出さなければなりません。最初のfooがtrueを返すと問題が始まります。このようにして、残りのfoo(foo2とfoo3)は呼び出されません。

各関数を呼び出す必要がある場合は、それらを呼び出す必要があります。実際には、それらを呼び出して結果を保存するだけです。

しかし、私には18個のfoo関数があり、これは私のコードのいくつかの部分にあります。短くて簡単にするためのトリックはありますか?

if1つのステートメントで呼び出してテストする18個の関数があるのはなぜですか?問題を解決するためのより良い方法がなければなりません。したがって、各機能には副作用があり、それらを発生させる必要があります。すばらしいですが、それはすでに問題のように聞こえます。

あなたがどのような問題を解決しようとしているのか、また各機能が何をしているのかはわかりませんが、現在の設定がほぼ最適であるとは信じられません。

于 2012-06-25T21:52:48.837 に答える
1

関数を合計するのはどうですか?(関数が独立していて、正のintまたはポインターを返すことができる場合にのみうまく機能します。

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


if(resultSum>0){
 //do things
}
于 2012-06-25T21:57:18.507 に答える