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 @   zjh6  阅读(15)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示