私はオブジェクト指向の方法で使用できるように、OpenGLの周りに小さなラッパーを作成しています。私はバッファと呼ばれるクラスを作成しました。そのコンストラクタでは、GLenum型の多くに対して渡されたバッファの型を検証したいと思います。ここで、コードの関連部分である:コードスタイル - 可能性のある値に対して整数を検証する方法を教えてください。
このコードでは、switch
ステートメントが適切な値に、ステップ、およびそれがswitch
ステートメントから破断するまで、他の有効な値を通過します。他のすべての値はdefault
節に入り、例外がスローされます。私は、しかし、またif
ステートメントを使用することができます
if (type != GL_ARRAY_BUFFER &&
type != GL_ATOMIC_COUNTER_BUFFER &&
type != GL_COPY_READ_BUFFER &&
type != GL_COPY_WRITE_BUFFER &&
// *** Lots more valid values here... ***
) {
throw std::logic_error("Invalid GLenum 'type' in Buffer constructor.");
}
// ...
}
しかし、これはtype !=
の繰り返しの多くを使用しており、必ずしも明確ではありません。 コードの明瞭度との速度のために、これを行う際に受け入れられた規則がありますか?私の入力をまったく検証しなければならないのですか?そうしないと、未定義の動作が起こる可能性がありますか?
最初の質問: 'type'値を生成した関数は実際に無効な値を返すことができますか? –
@NeilButterworth 'type'値は一般的にハードコードされていて、関数に依存しませんが、私のクラスメートはこの' class'を使うつもりで、私はドキュメントに従うことができません。 –
http://stackoverflow.com/questions/97987/advantage-of-switch-over-if-else-statementスイッチは、20年前のコンパイラを使用しても効率的なコードを生成する可能性が非常に高いです。 – Olivier