2011-12-29 5 views
2

なぜ次投げるコンパイラエラー:Dクラス不変呼び出しconstが機能

class A 
{ 
public: 
    int f() const 
    { 
     return 5; 
    } 

protected: 
    invariant() 
    { 
     assert (f() == 5); 
    } 
} 

main.d(14): Error: cannot call public/export function f from invariant

私は不変式の概念を理解しています。メソッドへのすべてのpublic呼び出しの間にクラスの状態をチェックしたいとします。

しかし、不変またはconstメンバ関数は、(thisが渡された場合を除いて)クラスの状態を変更することはできません。したがって、これらの関数の不変チェックは冗長です。不変の呼び出しは無視され、無限ループは現れず、コンパイラー・エラーを誤ってキャストします。


私が定義するオブジェクトと階層を作成するので、私はこれに来た:

bool hasParent() const 
{ 
    return (parent !is null); 
} 

この小さな機能を使用すると、あまりにもクラス内のより容易な、しかしおそらく外です。しかし、それを公に定義することは不変()を無視する。

答えて

1

これはおそらく省略です。 Bugzillaに改善リクエストをお寄せください。

+2

投稿:http://d.puremagic.com/issues/show_bug.cgi?id=7182#c0 –