C++によるクラス不変条件
2006/04/17
クラス不変条件はメソッドとして記述される一貫性チェックです。それは、関数の開始と終了時に呼び出されます。さっそく単純な不変条件を書いてみましょう。このところ毎回紹介しているこのページでは、以下のコードを示してます。
class
A
{
public:
#ifdef DBG
virtual
void invariant() {
...contracts...
}
#endif
void
foo();
};
関数の内側で、invariant()を呼び出すコードを書かなくてはいけません。
void
A::foo()
{
#ifdef DBG
invariant();
#endif
...
#ifdef DBG
invariant();
#endif
}
例のページでは、マクロを含んだコールバックを設置するために、テンプレートを使うことを推奨しています。これはスマートな手段といえるでしょう。
template
inline void check_invariant(T&
iX)
{
#ifdef DBC
iX.invariant();
#endif
}
void
A::foo()
{
check_invariant(*this);
...
check_invariant(*this);
}
単純な不変条件はこのように実現できます。しかし、D言語のDbcはもっと優れていますから、完全なDbCを現実のものにするためにはさらなる努力が必要となりそうです。