D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: D语言基础之模板和混入mixin技术

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为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D语言基础之模板和混入mixin技术