0

変数「var1」が現在のスコープに存在するかどうかを確認する必要があります。

somefunction()
{

     ...
     ....
     {
          ......
          string var1("");
          ...
          // if i check var1..it should be in scope
          // something like inScope(var1)..return true if it is in scope else false
     }
     // if i check var1..it should be out of scope
     // something like inScope(var1)..return true if it is in scope else false
}
4

1 に答える 1

1

言語の核心、またはツールチェーンで何かを誤解していると思います。メソッド、クラス、変数など-「存在する」と「スコープ内にある」のどちらかです。「スコープ内にない」ものを実際に使用しようとすると、これはハードエラーであり、そのようなコードをコンパイルしようとすると、通常は失敗します。ローカル変数の存在に応じてロジックをチェックして分岐することにはほとんど意味がありません。あなたは何かを複雑にしすぎていると思います。メソッドの「後のコード」で何かが以前に発生したかどうかを確認したい場合boolは、メソッドの最初に単純な変数を作成し、それをに初期化してfalse、問題が発生した場合にのみtrueに設定してみませんか。 ?後で変数をチェックしますか?

そうは言っても、ローカル変数が定義されているかどうかを確認することはできませんが、テンプレートとSFINAEを使用した巧妙なトリックにより、クラスメンバーが存在するかどうかを確認することは完全に可能です。つまり、クラスXがフィールドYまたはメソッドZを定義しているかどうかをテストし、コンパイル時に静的にtrue/false応答を取得できます。

たとえば、https://stackoverflow.com/a/7687190/717732またはhttps://stackoverflow.com/a/2133273/717732を確認することをお勧めます

于 2012-09-25T18:45:30.750 に答える