On Thursday, 12 June 2014 at 16:08:49 UTC, Taylor Hillegeist wrote:
I am considering having different sized arrays for the buffer. I just figured that meant having different structs with various sizes.

You might be able to do it with a templated struct and alias this. Check this out:

struct R_Buffer {
   int[] buffer;
}

struct R_Buffer_Sized(size_t bufferSize) {
   int[bufferSize] buffer;
   R_Buffer getGenericBuffer() { return R_Buffer(buffer[]); }
   alias getGenericBuffer this;
}

usage:

R_Buffer_Sized!48 buffer;

then you can pass buffer to any function expecting a regular R_Buffer and it will just work. Be careful not to store the buffer though, since it is stack allocated, escaping a reference to it will lead to crashes.



That's also the reason why something like this is a bit problematic:
        R_R_Buffer RRB=R_R_Buffer(uint[12]);

What's the lifetime of the uint[12]? It is in the scope of the function call only, so if this were allowed, the compiler might consider it a temporary... and then you'd escape a reference to it and get corrupted data.

Putting the buffer up top as a separate variable at least gives it a clear lifetime scope.

Reply via email to