私は D プログラミング言語でマルチスレッド プログラムを書いていますが、この言語にはかなり慣れていません。Tid.send()
パッケージ内のおよびreceive[Only]()
APIを使用してスレッド間で渡される型std.concurrency
には、送信側と受信側のスレッド間の競合状態を回避するために値型または定数でなければならないという制限があります。struct Message
私は値渡ししていた単純な型を持っています:
enum MessageType {
PrepareRequest,
PrepareResponse,
AcceptRequest,
Accepted
}
struct Message {
MessageType type;
SysTime timestamp;
uint node;
ulong value;
}
ただし、一部MessageType
の s にはすべてのフィールドがなく、switch ステートメントを使用して、ポリモーフィズムを使用してこの作業を自動的に行うことができるときに、どの型にどのフィールドがあるかを覚えておくのは面倒です。ここで推奨されるクラス階層を使用していimmutable
ますか、それとも私がすでに使用しているアプローチが最善の方法ですか?その理由は?
編集
また、不変クラスを使用する必要がある場合、ユーザー定義クラスの不変オブジェクトを作成するための推奨される方法は何ですか? immutable
戻り値を?にキャストするクラスの静的メソッド。