私は通常、何らかの状態を検出したいコードを持っており、それが存在する場合はその状態を処理します。
条件のテストは、問題の半分の処理にとって重要な特定の情報を抽出します。
ただし、if/else コンストラクトでは、if コンストラクト自体で local-to-the-if 変数を宣言することはできません(1)。したがって、情報が抽出される可能性のあるさまざまな条件のすべてについて、if/else チェーン全体の開始前に変数宣言を配置する必要があります。
例えば:
else if ((EndsWithToken("d") || EndsWithToken("dsh")) &&
(p1 = find(m_input_line, '[')) &&
(p2 = find(m_input_line, ']')) &&
p2 > p1)
{
// process what we found inside of the [ ] brackets using p1 and p2...
}
このスニペットは、if/else の長いチェーンの一部であり、他のスニペットは p1 と p2 を必要としませんが、入力ストリームから抽出された整数値、double、または 2 つのポイントなどが必要になる場合があります。 ...
ポイントは、 const TCHAR * p1 と p2 を上記のスコープにローカルに導入することを知っている方法はなく、それが使用される唯一の場所であり、構造全体が同じままであることを可能にします。
これを可能にする C++ 言語機能またはパターンはありますか?
(1) 一部の人が指摘しているように、それが最初のものであれば、基本型の単一の変数を宣言し、非ゼロに対してのみテストすることが可能です。これは、この問題の一般的な解決策としてはあまり役に立たないほど限定的です (ただし、時折、それが役立つ場面が現れることがありますが、非常にまれです)。