yidabu 2007-4-27 11:28
D语言基础之模板和混入mixin技术
D语言基础之模板和混入mixin技术知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org D语言通过模板,很好的支持泛型编程。与C++的模板相比较,各有优略。总体上说,D语言的模板在很多方面还是很方便的。 D语言还支持模板的混入(mixin),简单的讲就是把模板实例化之后,将模板中的代码插入到当前的位置。这是一个非常方便的工具! 具体的,请看下面的演示代码 [Copy to clipboard] [ - ]CODE: import std.stdio; void main() { tryTemplate(); tryMixin(); } // template //--------------------------------------------- template MyMathLib(float_t) { // struct, class模板 struct Vector2 { float_t x, y; static Vector2 opCall(float_t _x, float_t _y) { Vector2 ret; ret.x = _x; ret.y = _y; return ret; } Vector2 opAdd(in Vector2 v) { Vector2 ret; ret.x = x + v.x; ret.y = y + v.y; return ret; } } // 模板函数 float_t dot(in Vector2 v1, in Vector2 v2) { return v1.x*v2.x + v1.y*v2.y; } } // 函数模板的另外一种写法 T Square(T)(T t) { return t*t; } // 类模板的另外一种写法 class Vector3(T) { T x, y, z; } void tryTemplate() { alias MyMathLib!(float).Vector2 Vector2f; Vector2f v1 = Vector2f(1, 2); Vector2f v2 = Vector2f(3, 4); Vector2f v3 = v1 + v2; writefln("x = ", v3.x, ", y = ", v3.y); float d = MyMathLib!(float).dot(v1,v2); writefln("d = ",d); float f = 2; f = Square(f); // 调用模板函数 writefln(f); Vector3!(float) vv = new Vector3!(float); } // mixin //------------------------------- template MyMixin() { void Foo() { writefln("MyMixin.Foo"); } } template MyMixin2(T) { T x; } class MyClass { mixin MyMixin2!(int); mixin MyMixin; } void tryMixin() { MyClass c = new MyClass; c.Foo(); writefln(c.x); } D语言论坛 http://www.d-programming-language-china.org 注: 输出信息如下: QUOTE: x = 4, y = 6 d = 11 4 MyMixin.Foo 0 ( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台