d覆盖指定方法
原文
想表达插入指定的mixin模板到子类中,但是说的是,要覆盖指定方法.因此开发人员,可只覆盖方法而不实际插件(mixin)到mixin模板中.
如果可表达,在每个子类中,可求值指定的mixin模板,那就太好了.使用class mixin Foo;
import std;
mixin template Foo()
{
void fancyMethod(){
writeln(__traits(identifier, typeof(this)));
}
}
class Animal {
class mixin Foo;//这里
}
class Dog : Animal {}
class Bulldog : Dog {}
void main() {
new Animal().fancyMethod();
new Dog().fancyMethod();
new Bulldog().fancyMethod();
}
有this参数可模拟:
import std;
void main()
{
new Animal().fancyMethod();
new Dog().fancyMethod();
new Bulldog().fancyMethod();
}
class Animal {
void fancyMethod(this This)(){
writeln(__traits(identifier, This));
}
}
class Dog : Animal {}
class Bulldog : Dog {}
//输出:
Animal
Dog
Bulldog
通过在子类内重新声明方法来覆盖.
然而问题是方法只是模板,如,它们像UFCS函数一样工作,只知道被调类型,而不知道实际类型.如果把斗牛犬转换为Animal,会按模板参数用动物来调用fancyMethod.(这打破了一堆OOP模式和使用继承优点)
一些插件到子类中的方法,对很多事情来说都是非常好的,但如果用户需要显式插件额外方法会更好,这样就不会神奇地出现.(+显式 插件可指定额外的选项)
值得研究机制来要求用户必须mixin.
浙公网安备 33010602011771号