`
oldrev
  • 浏览: 230151 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

D Tuple 应用:为 struct 添加成员

阅读更多
D的文档里说 struct/class 的 .tupleof 属性可以把一个 struct 的所有成员变量转换为一个 tuple。那么反过来让 tuple 作为 struct 的成员可不可以呢?答案是可以,因为 tuple相当一个可以存放不同元素类型的静态数组,我们只要在 struct 中声明一个 Tuple 实例就能达到目的:
D 代码
 
  1. struct Foo(Tuple...)  
  2. {  
  3.     Tuple fields;  
  4. }  
  5. alias Foo!(intlongchar) Foobar;  
  6. Foobar bar;  

这样就相当于手写:
D 代码
 
  1. struct Foobar  
  2. {  
  3.     int field0;  
  4.     long field1;  
  5.     char field2;  
  6. }  

当访问 bar 中的元素时,只需:
D 代码
 
  1. bar.fields[0] = 1; // Tuple 第一个元素是 int 类型  
  2. bar.fields[2] = 'A';  
  3. ...  


值得注意的是由于 Tuple 是一个整体,因此在 union 中声明 Tuple 实例是不能起到 “union” 的效果的。
分享到:
评论
5 楼 oldrev 2007-03-22  
既然现在函数的形参表都能与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;
}

4 楼 tomqyp 2007-03-17  
要是能把QT移到D就好了
3 楼 oldrev 2007-03-17  
顺便说一句,如果想尝试 GUI 的话可以试试 DFL:
http://www.dprogramming.com/dfl.php
2 楼 oldrev 2007-03-17  
引用
有没有编译好的dwt, 我试着编译没有成功, 版主有没有编译成功的dwt, 发给我一份, entaoyang@gmail.com

哈哈,我不是版主
dwt 很久没更新了,不兼容 D 1.0 的语法。
1 楼 entaoyang 2007-03-17  
有没有编译好的dwt, 我试着编译没有成功, 版主有没有编译成功的dwt, 发给我一份, entaoyang@gmail.com

相关推荐

    Tuple Spaces:元组空间有超时和事务。-开源

    Tuplespace的Java实现。 移动到https://github.com/mike-k-houghton/tuplespace元组是项目的有序列表。 元组空间是一种关联存储器,其中条目,元组存储在该空间中,并使用基于元组的内在属性的搜索条件进行检索。 这...

    头歌Python入门之元组与字典

    tuple(seq):将列表转换为元组。 2.字典的使用:访问字典中的值,添加键-值对,修改字典中的值,删除键-值对, 3.字典的遍历:遍历字典中的键-值对,遍历字典中的键(Python为字典类型内置了keys()方法,该方法会将...

    C++11新特性std::make_tuple的使用

    std::tuple是C++ 11中引入的一个非常有用的结构,以前我们要返回一个包含不同数据类型的返回值,一般都需要自定义一个结构体或者通过函数的参数来返回,现在std::tuple就可以帮我们搞定。 1.引用头文件 #include ...

    tuplet:使用JavaScript生成音乐

    连音使用JavaScript生成音乐安装npm install tuplet文献资料参见执照Tuplet是。 Tuplet徽标是并且基于Noun Project的 。 Tuplet随附的样本已获得单独许可。 有关详细信息,请参见samples文件夹中的文件。

    tuple_utility, 缺少的C++ tuple 功能.zip

    tuple_utility, 缺少的C++ tuple 功能 tuple_utilityC++ 元组的实用工具。tuple_map:#include"tuple_utility.hpp"int main(){ auto t = std::make_tuple(0, 1

    HTMLTestRunner.py

    HTMLTestRunner修改为兼容python3。使用时将文件名去掉"[py3]",文件放入对应Lib文件夹下,代码导入import HTMLTestRunner

    clj-tuple:高效的Clojure小收藏

    该库为小型地图和矢量提供了有效的实现,有关更多信息,请参见。 这些实现最终将被合并到适当的Clojure,但是现在可以通过更换使用vector与clj-tuple/vector和hash-map与clj-tuple/hash-map 。 用法 [clj-tuple " ...

    类似Boost中Tuple的实现

    类似Boost中Tuple的实现 自己编写的 请支持原创

    Python学习笔记基本数据结构之序列类型list tuple range用法分析

    tuple:元组,由 () 标识; 有序;不可改变元组元素(和list的主要区别) list 和 tuple 的创建: print([]) # 空list print([a,1,True]) # 元素类型不限 print([x for x in range(0,6)]) # 列表推导式 print(list...

    打印输出任意tuple

    运用C++11,模板编程技术,来反向解析任意tuple元素

    typescript-tuple:在TypeScript中使用元组的泛型

    import { IsFinite } from 'typescript-tuple' type Foo = IsFinite < [ 0 , 1 , 2 ] > // Expect: true const foo : Foo = true type Bar = IsFinite < [ 0 , 1 , 2 , ... number [ ] ] > // Expect: false ...

    proposal-record-tuple:关于Record和Tuple值类型的ECMAScript建议。 | 第二阶段

    Tuple ,深度不变的类似数组的结构#[1, 2, 3, 4] 记录和元组只能包含基元以及其他记录和元组。 您可以将Records和Tuples视为“复合原语”。 通过完全基于基元而不是对象,Records和Tuples完全不可变。 记录和元组...

    HALCON算子函数Chapter 18: Tuple.doc

    HALCON算子函数Chapter 18: Tuple

    python: 判断tuple、list、dict是否为空的方法

    Test tuple_test = () ...以上这篇python: 判断tuple、list、dict是否为空的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:pytho

    c++头文件大全.txt

    C++ 标准库头文件大全 ...<tuple>:元组 <unordered_map>:无序映射 <unordered_set>:无序集合 <utility>:实用程序 <vector>:向量 输入/输出 <fstream>:文件流 <iomanip>:输入/输出操作符格式化

    tuple_sort.py

    tuple中元素值排序,取top3 ("测试", (("张三", 5), ("李四", 1), ("王五", 9), ("马六", 6), ("田七", 13), ("赵八", 12))) 结果 ('测试', [('田七', 13), ('赵八', 12), ('王五', 9)])

    浅析C++标准库元组(tuple)

    一、什么是元组 ...一个tuple可以包含不同类型的成员,例如上面的tu包含一个int和一个字符串。 二、用法 在考察源码之前,我们必须先知道它的用法。 要想使用tuple,要包含头文件<tuple>: #include <tu

    named_tuple:为w创建数据类的简便方法

    named_tuple 为w创建数据类的简单方法来自@ ChayimFriedman2的想法之后import "named_tuple" for NamedTupleS = NamedTuple.create("S", ["x", "y"])s = S.new(1, 2)System.print(s) // S(1, 2)System.print("(%(s.x...

    C++11新特性std::tuple的使用方法

    1. 引入头文件 #include <tuple> 2. std::tuple初始化 std::tuple<int> t1(10...std::tuple<int> foo_tuple() { return {1, -1}; // Error until N4387 return std::tuple<int>{1, -1}; // Always works return

    测量程序编制 - python 31数据类型:Tuple(元组) - 装包与拆包.pptx

    Tuple(元组) - 装包与拆包 装包与拆包 Python中,元组装包拆包是自动的,不需要任何函数,导致很多人对于函数返回值一会有括号一会没括号非常迷惑 a,b,c=1,2,3 #等价于 a,b,c=(1,2,3) print(a,type(a)) #因为等号...

Global site tag (gtag.js) - Google Analytics