`
oldrev
  • 浏览: 234251 次
  • 性别: 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

相关推荐

    C++ 中 std::tuple 与 std::pair 的全面解析与应用实践

    首先详细介绍了 std::pair 的定义、功能与基本用法,包括其构造、访问成员元素的多种方式以及在简单数据组合场景下的应用实例。接着深入剖析了 std::tuple,阐述其相较于 std::pair 的更广泛通用性,如可容纳多个...

    HALCON算子函数Chapter 18: Tuple.doc

    6. tuple_ord:將長度為 1 的字符串的元組轉換為它們相應的 ASCII 碼元組。 7. tuple_ords:將一個字符串的元組轉換為它們 ASCII 碼的元組。 8. tuple_real:將一個元組轉換為一個浮點數的元組。 9. tuple_round:將...

    HALCON算子函数Chapter18:Tuple参考.pdf

    本章節將詳細介紹Tuple的基本概念、Tuple操作函數和Tuple应用场景。 18.1 Arithmetic Tuple算數運算函數提供了丰富的算數運算功能,包括絕對值、反余弦、加法、減法、乘法、除法、平方根、對數、反正切、反雙曲...

    藏经阁-std__tuple与模板元编程.pdf

    std::tuple提供了一个名为`std::tie`的函数,用于将std::tuple对象的元素解包到变量中,例如: ```cpp int i; char c; double d; std::tie(i, c, d) = std::make_tuple(1, 'a', 5.5); ``` std::tuple的应用 std::...

    打印输出任意tuple

    `std::tuple`是C++标准库中的一个容器,它可以容纳不同类型的数据,类似于数组或结构体,但不强制成员具有相同的类型。每个元素都有自己的类型和位置,可以通过索引来访问。C++11引入了`std::get`函数,用于获取`...

    datastruct:datastruct测试

    在这个名为"datastruct:datastruct测试"的项目中,我们可以推测这是一个用于学习和实践数据结构的练习或测试。 首先,让我们从"Python"这个标签入手。Python是一种多用途的、解释型的编程语言,以其简洁明了的语法...

    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文件夹中的文件。

    [modern c++]tuple的使用(csdn)————程序.pdf

    另外,C++17引入了`std::apply`,它允许将一个函数应用到`tuple`的所有元素上,这对于泛型编程非常有用。 ### `tuple`的解构 C++17引入了结构化绑定,这使得解构`tuple`变得非常直观。下面的例子展示了如何解构一...

    类似Boost中Tuple的实现

    在编程领域,`Tuple`是一种常见的数据结构,它允许存储多个不同类型的值在一个单一的实体里。Boost库中的`Tuple`是C++社区广泛使用的工具,因为它提供了灵活且类型安全的方式来组合和传递多个值。本篇文章将探讨如何...

    tuple:C ++ 11中的简单元组实现

    此外,元组支持成员函数如`size()`来获取元素的数量,以及`empty()`来检查元组是否为空。 元组的一个关键特性是模板元编程,这使得可以使用类型推断来创建和操作元组。例如,`std::make_tuple`函数可以根据提供的...

    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

    C类class和结构体struct区别-C教程共3页.pd

    - 不过,如果基类是`struct`,所有成员默认为`public`,这意味着子`struct`将继承所有基`struct`的`public`成员。 3. **习惯用法**: - `struct`通常用来表示数据聚合,即组合多个数据项的简单数据类型,如点坐标...

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

    9. **std::apply**:C++17引入了`std::apply`,它允许将一个可调用对象应用于一个`std::tuple`的所有元素,这使得处理`tuple`中的元素更加方便。 10. **std::tuple_size** 和 **std::tuple_element**:这两个模板类...

    HTMLTestRunner.py

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

    python中的list、tuple、set、dict用法简析.doc

    Python 中的 List、Tuple、Set、Dict 用法简析 Python 是一种高级的编程语言,它提供了多种数据结构,包括列表(List)、元组(Tuple)、集合(Set)和字典(Dict)。这些数据结构可以用来存储和处理数据,本文将...

    clj-tuple:高效的Clojure小收藏

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

Global site tag (gtag.js) - Google Analytics