The only thing I've though of so far is to declare a class that holds a bunch of abstract methods, and then have multiple descendants that each have a special variant of the struct. And even then I've either got to copy it again, or to cast it each time I use it. (Though at least with this approach all the casts are located in one area of the code.)

You don't need to cast it each time, you can do something like:

auto structPointer = cast(MyStruct*) byteArray.ptr;

and use structPointer after that (in D structPointer.foo will get the member foo, same as (*structPointer).foo). So if you go with the common parent approach , you can just store that pointer as a field. This will require one extra pointer dereference each time you access the struct, though. If you need to access it a lot it may be more efficient to make a field of type MyStrtuct and just copy the data to it. The time it takes to copy the struct shouldn't really be significant anyway, since you are reading it from a file and file IO is typically much slower than copying memory.

By the way, if you use the common parent approach, the common parent should probably be an interface (http://dlang.org/interface.html), not a class.

Reply via email to