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为大家提供一个学习交流各种知识的平台