On 03/16/2015 01:24 PM, via Digitalmars-d-learn wrote:
The problem in your example is that your making a copy of the returned
data. Of course any changes to that copy won't affect the original.
You need to return a pointer to it (`ref` won't do if you want to
store it in a local variable, because these can't be `ref`).
struct BlockHead
{
uint magic = 20150312;
uint magic2;
uint blockSize;
uint unused1;
ulong unused2;
ulong spare[61];
T* embedded(T)() {
static assert(T.sizeof < spare.length);
return cast(T*) spare.ptr;
}
}
How to use it:
void useIt(ref BlockHead bh) {
static struct InternalData {
int foo;
ubyte[20] bar;
}
auto data = bh.embedded!InternalData;
data.foo = 42;
}
Nice! That looks like exactly what I was hoping for.