dmd casts but ldc doesn't, and doesn't work in template in dmdm
H. S. Teoh via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jun 4 18:17:02 PDT 2017
On Sun, Jun 04, 2017 at 06:12:42PM -0700, H. S. Teoh wrote:
> On Mon, Jun 05, 2017 at 01:14:31AM +0000, Mike B Johnson via Digitalmars-d-learn wrote:
> [...]
> > Guid is a struct and I am trying to get the "bytes" of the struct" to
> > get the guid bytes. It is quicker than accessing all the elements one
> > at a time.
>
> union U {
> typeof(guid) guid;
> ubyte[guid.sizeof] bytes;
> }
> U u;
> u.guid = guid;
> // ... do something with u.bytes.
[...]
And if you're going to be doing this a lot on many different types, you
could ease the typing by declaring a template for it, for example:
union AsBytes(T) {
T t;
ubyte[T.sizeof] bytes;
}
ubyte[T.sizeof] asBytes(T)(T t) {
AsBytes!T u;
u.t = t;
return u.bytes;
}
...
struct S {
/* stuff */
}
S s;
auto bytes = s.asBytes;
... /* do stuff with bytes, which is a static array of ubyte */
Note, of course, that this will be @system if T contains any pointers.
T
--
2+2=4. 2*2=4. 2^2=4. Therefore, +, *, and ^ are the same operation.
More information about the Digitalmars-d-learn
mailing list