C++によるクラス不変条件
クラス不変条件はメソッドとして記述される一貫性チェックです。それは、関数の開始と終了時に呼び出されます。さっそく単純な不変条件を書いてみましょう。このところ毎回紹介しているこのページでは、以下のコードを示してます。

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を現実のものにするためにはさらなる努力が必要となりそうです。
|