我正在处理一种情况,我希望有一个特定的基类,它定义了一个静态关联数组和使用它的静态函数,然后在从它继承的类中复制这个功能,但每个子类都有它自己的数组实例。然而,看起来子类只是继承了父类的数组,而不是像我希望的那样创建自己的静态副本。以下是我希望完成的超级简化的精简版:
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 。我想知道是否有一个涉及模板的解决方案可能有效,但我似乎无法将它拼凑在一起。