私は、静的連想配列とそれと連携する静的関数を定義する特定の基本クラスを持ち、それを継承するクラスでこの機能を複製したいという状況に取り組んでいますが、各子クラスは配列の独自のインスタンス。子クラスは親の配列を継承しているように見えますが、私が望んでいたように独自の静的コピーを作成するのではありません。以下は、私が達成したいと思っていたものの非常に単純化された簡略版です。
class MyBase {
static string[string] dict;
static void attach(string key, string val) {
dict[key] = val;
}
}
class MySubA : MyBase {
// various unique member variables
}
class MySubB : MyBase {
// ...
}
void main() {
MySubA.attach("a", "a1");
MySubB.attach("b", "b1");
writefln("-:%s", MyBase.dict);
writefln("A:%s", MySubA.dict);
writefln("B:%s", MySubB.dict);
}
必要な出力:
-:[]
A:["a":"a1"]
B:["b":"b1"]
実際の出力:
-:["a":"a1", "b":"b1"]
A:["a":"a1", "b":"b1"]
B:["a":"a1", "b":"b1"]
継承を破棄せずに、各サブクラスに関連するコードを複製するだけで、これを回避する方法はありますか?私が使用している配列に割り当てる実際のコードは、上記のアタッチ関数よりも複雑なので、毎回複製したり、必要に応じて手動で.dictに割り当てたりする必要はありません。うまくいくかもしれないテンプレートを含む解決策があるかどうか疑問に思っていますが、私はそれをつなぎ合わせることができないようです。