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.

posted @ 2023-01-03 11:33  zjh6  阅读(19)  评论(0)    收藏  举报  来源