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

查看完整版本: D Tuple应用:为struct添加成员

yidabu 2007-4-27 19:00

D Tuple应用:为struct添加成员

D Tuple应用:为struct添加成员知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org        by:        oldrev        from:        http://oldrev.javaeye.com/blog/60422        关键字:        D DLang D语言 Tuple        D的文档里说 struct/class 的 .tupleof 属性可以把一个 struct 的所有成员变量转换为一个 tuple。那么反过来让 tuple 作为 struct 的成员可不可以呢?答案是可以,因为 tuple相当一个可以存放不同元素类型的静态数组,我们只要在 struct 中声明一个 Tuple 实例就能达到目的:        D 代码        [Copy to clipboard] [ - ]CODE:                                struct Foo(Tuple...)                {                    Tuple fields;                }                alias Foo!(int, long, char) Foobar;                Foobar bar;                这样就相当于手写:        D 代码        [Copy to clipboard] [ - ]CODE:                                struct Foobar                {                    int field0;                    long field1;                    char field2;                }                当访问 bar 中的元素时,只需:( 本文出处: http://www.d-programming-language-china.org )        D 代码        [Copy to clipboard] [ - ]CODE:                                bar.fields[0] = 1; // Tuple 第一个元素是 int 类型                bar.fields[2] = 'A';                ...                值得注意的是由于 Tuple 是一个整体,因此在 union 中声明 Tuple 实例是不能起到 “union” 的效果的。        oldrev        2007-03-22 13:54        既然现在函数的形参表都能与tuple相互转化,那估计D2.0能把符合 (x, y, y, ....) 形式的表达式都定义为 tuple,就能实现:        代码        [Copy to clipboard] [ - ]CODE:                                alias (int, long, char) Tp; //定义一个 tuple: Tp                                int x, y;                (x, y) = (y, x); // 交换 x, y 的值                                void foo(int x, long y){ ... };                (int, long) args = [1, 2];                foo(args); // 调用 foo(1, 2)                                //函数返回多个值                (int, char[]) bar() {                    (int, char[]) ret = [1, "foobar"];                    return ret;                }        ( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D Tuple应用:为struct添加成员