これが整数用であると仮定して、すべての演算子をオーバーロードし、静的変数のオーバーフローを合計するInt32のラッパークラスを記述します。これらの演算子でオーバーフロー検出を実行します。最も簡単な(そして最も遅い)のは、checked / try-catchルートを使用することですが、パフォーマンスが必要な場合は、よりスマートな代替手段(つまり、符号の比較)があります。
次に、intをどこでもラッパークラスに置き換えます。
基本的なコード構造:
struct CheckedInt {
static int s_numOverflows = 0;
int m_value;
public CheckedInt(int value) { m_value = value; }
public static CheckedInt operator +(CheckedInt x, CheckedInt y) {
try {
return new CheckedInt(checked(x.m_value + y.m_value));
}
catch(OverflowException) {
++s_numOverflows;
return new CheckedInt(unchecked(x.m_value + y.m_value));
}
}
// ... etc for all operators, you'll also need to implement casts, IComparable(T), IEquatable(T), etc.
}