Я работаю над ситуацией, когда я хотел бы иметь определенный базовый класс, который определяет статический ассоциативный массив и статические функции, которые с ним работают, а затем дублировать эту функциональность в классах, которые наследуются от него, но с каждым дочерним классом, имеющим собственный экземпляр массива. Однако похоже, что дочерние классы просто наследуют родительский массив, а не создают свою собственную статическую копию, как я надеялся. Ниже приведена супер-упрощенная урезанная версия того, что я надеялся выполнить:
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 вручную, если это необходимо. Мне интересно, есть ли решение с использованием шаблонов, которое могло бы работать, но я просто не могу собрать его воедино.