XML ファイルからデータを読み込むと、xml ファイル内のタグに応じて、データがクラス メンバー変数にアタッチされます。
たとえば、xml ファイルの値に「!」が含まれている可能性はありますか?この場合は有効ではないため、その値を受け入れることができません。したがって、その値のメンバー変数は空です。
ただし、一部のメンバー変数の型は、他のクラスまたは整数またはブール値です。これらの値が設定されているかどうかを確認するにはどうすればよいですか? それらのための機能がないのでemtpy()。
それらがオプションでない場合は、それらが存在しないときに解析メカニズムでエラーが発生するようにする必要があります。それ以外の場合は、次のようなものを使用できますboost::optional。
変数が明示的に設定されているかどうかを実行時に検出する方法はありません。そのため、一部のコンパイラは、変数が初期化されていない可能性があると疑われる場合に (エラーではなく) 警告を出します。
どの変数が設定されたかを追跡するのは、プログラマーの責任です。これを行う低レベルの方法は、ポインターを使用し、それらを 0 に初期化し、初期化されたメモリを指す必要があるときにポインターを変更し、ポインターが指すオブジェクトが削除されたときにそれらを 0 に戻すことです。
C++ では、Boost.Optionalを使用して、このようにポインターをいじるのを避けることができます。
XML の読み取り中に XML 値を確認し、含まれている場合は"!"、その変数にデフォルト値を割り当てることができます。
たとえば、ptr をnullptr、ブール値をfalse、int を0orに設定し-1ます。
const可能な限りデフォルト値を使用してください。これにより、コードがより明確になり、保守が容易になります。