我正在处理这样一种情况:我想有一个特定的基类,定义一个静态关联数组和与其相关的静态函数,然后在继承它的类中复制这个功能,但每个子类都拥有自己的数组实例。然而,似乎子类只是继承了父类的数组,而不是像我希望的那样创建它们自己的静态副本。以下是我希望实现的超级简化剥离版本:
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"]
有没有一种方法可以避免放弃继承,而只是为每个子类复制相关代码?我正在使用的分配数组的实际代码比上面列出的attach函数更加复杂,因此我想避免每次都重复它,或者必要时手动分配到.dict。我想知道是否有涉及模板的解决方案可能会起作用,但我似乎无法将其组合在一起。
MySubA
和MySubB
不会以这种方式共享相同的基类。它们位于完全独立的类层次结构中,因为MyBase!MySubA
和MyBase!MySubB
是不同的类。同一模板的不同实例是完全独立的实体,彼此之间没有关系。 - Jonathan M Davis