发新话题
打印

[转载D语言文档] 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 代码

struct Foo(Tuple...)
{
    Tuple fields;
}
alias Foo!(int, long, char) Foobar;
Foobar bar;

这样就相当于手写:

D 代码

struct Foobar
{
    int field0;
    long field1;
    char field2;
}

当访问 bar 中的元素时,只需:( 本文出处: http://www.d-programming-language-china.org )

D 代码

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,就能实现:

代码

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

TOP

发新话题