Традиционно это делается с out
параметрами, например:Как назначить просто несколько возвращаемых значений?
void notfun(ushort p, out ubyte r0, out ubyte r1)
{
r0 = cast(ubyte)((p >> 8) & 0xFF);
r1 = cast(ubyte)(p & 0xFF);
}
С кортежами это можно переписать в виде
auto fun(ushort p)
{
import std.typecons;
return tuple
(
cast(ubyte)((p >> 8) & 0xFF) ,
cast(ubyte)(p & 0xFF)
);
}
К сожалению, результат не может быть передан непосредственно в кортеж переменный:
void main(string[] args)
{
ushort p = 0x0102;
ubyte a,b;
// ugly brute cast!
*(cast(ReturnType!(typeof(fun))*) &a) = fun(0x0102) ;
}
Есть ли специальный синтаксис, позволяющий что-то вроде
(a,b) = fun(0x0102);
или любой другой идиоматический способ сделать что-то подобное?
Это выглядит потрясающе, однако его можно переписать с помощью 'std.meta' вместо ваших собственных утилит? –
Похоже, единственное, что вам нужно сделать, это заменить 'RangeTuple' на' std.typecons.staticIota'. – rcorre
Спасибо, это должно быть в phobos. –