2
Dでは、immutable
は推移的であるため、不変構造の任意のフィールドへの代入は禁止されています。私が理解する限り、不変の構造体変数はと決してが変更されていることが強く保証されています。d2:部分的に既知の構造の不変性
しかし、このようなことを宣言すればどうなりますか?
struct OpaqueData;
immutable(OpaqueData*) data;
どのような構造Dに実装し、おそらく間接を持っていないの推移不変性を保証Dすることができますか?
不変クラスの不透明データへのポインタをカプセル化する正しい方法は何ですか?
さて、そうです。私は、Dスコープの**保証**について考えました**変更不可能な構造体ポインタがC関数に渡されたとき。実際には不可能です。少なくとも、不変の構造体ポインタをC関数に渡す前に 'immutable'をキャストして、型システムを破壊する必要があるからです。それを理解するのを手伝ってくれてありがとう。 – toriningen
うん。 Cが持つ最も強いものは 'const'であり、Cはそれをキャストすることができるので、' immutable'データをC関数に渡すと、あなたは自分の運命に慣れています( 'const'と同じですが、なぜなら、Dの 'const'データを変更することはまったく違法であるからです。 C関数が実際に 'const'として扱うならば問題ありませんが、そうでなければ問題は起こります。 –