gpt4 book ai didi

iteration - 迭代 dlang 结构

转载 作者:行者123 更新时间:2023-12-04 13:37:52 25 4
gpt4 key购买 nike

我有一个看起来像这样的结构:

struct MultipartMessage {
ubyte[] mime, data;
Header header;

void setSender(string sender) {
header.sender = sender;
}
void setId(int id) {
header.id = id;
}
}

我想在另一个类中迭代它,如下所示:

struct Socket {
...

void send(MultipartMessage msg) {
foreach (part; msg) {
sendPart(part);
}
}

...
}

这可能吗?我想使用类似于 Python 的 __iter__MultipartMessage可以按特定顺序返回字段,理想情况下甚至可以运行一些附加代码,例如 header.serialize() .

理想情况下,我会向 MultipartMessage 添加一个函数看起来像这样(伪代码):

ubyte[] __iter__() {
yield mime;
yield data;
yield header.serialize(); //header.serialize returns a ubyte[]
}

最佳答案

使用 tupleof :

foreach (ref part; msg.tupleof)
sendPart(part);

这将调用 sendPartmime , dataheader (结构的字段,按照它们被声明的顺序)。您可以通过检查字段类型来过滤字段,例如 static if (!is(typeof(part) == Header)) .

要获取字段名称,您可以使用 __traits(identifier) :

foreach (i, ref part; msg.tupleof)
writeln(__traits(identifier, msg.tupleof[i]));

( __traits(identifier, part) 将返回 part 。)

还有 __traits(allMembers) ,它也返回方法。

关于iteration - 迭代 dlang 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com