本文主要是介绍d继承链中忽略了模板插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
import core.stdc.stdio;class A
{void visit(int a){ printf("A - int
");}void visit(float b) { printf("A - float
");}
}mixin template Bmix(AST)
{// 移动进Boverride void visit(int a) {printf("B - int
");}override void visit(float b) {printf("B - float
"); super.visit(b);}
}class B : A!int
{alias visit = A!int.visit;mixin Bmix!int;
}class C : B
{alias visit = B.visit;override void visit(float b){ printf("C - float
");super.visit(b);}
}void main()
{C vis = new C();float c = 7.0;vis.visit(c);
}//输出:
C - float
A - float
把两个访问方法
,单独移进去,则为
C - float
B - float
A - float
import std.stdio;
class A
{void f(){ writeln("A.f"); }
}
class B: A
{alias f = A.f;mixin X!();
}
mixin template X()
{override void f(){ writeln("B.f"); super.f(); }
}
class C: B
{override void f(){ writeln("C.f"); super.f(); }
}
void main()
{(new C).f();
}
同样,
C.f
A.f
//期望的是
C.f
B.f
A.f
ParseTimeTransitiveVisitor
用插件访问,影响dmd
作为库.
别名
使事情复杂了.模板
插件按名工作,f
已在那,说明覆盖了模板插件
版的f
.B.f
不是虚树
的一部分,所以父
没有错.你可以别名两个:
class B: A
{alias f = A.f;alias f = x.f;mixin X!() x;
}
两个f
构成重载集
.
总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!
全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。
这篇关于d继承链中忽略了模板插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!