Thread overview
I wish I could inherit structs.
May 17, 2005
Andrew Fedoniouk
May 17, 2005
Mike Parker
May 17, 2005
Ben Hinkle
May 17, 2005
This is quite an interesting problem.

In the DirectX SDK, there is a structure called D3DXFRAME.  This simply holds some data members that describe a link in a 3D hierarchy.  It doesn't really matter what it does; all it matters is that it's a struct.

Now, here's the thing.  This struct _must_ be a struct, as the data members cannot be moved around or realigned.  This is because the internal workings of some of the SDK functions rely on the members being in certain places.

But at the same time, I need to be able to derive from this struct so I can add my own custom data to it.  Which is currently impossible.  The SDK was designed with C++ in mind, which can do this.

The worst part is that there isn't really a workaround.  I can't make the D3DXFRAME a class as there is no guarantee that the members will stay in the same order/alignment.  I can't make a parallel class that holds the extra data as there is no place for me to put a reference to the class instance in the D3DXFRAME structure.  About the only thing I _could_ do is to keep an associative array indexed by D3DXFRAME pointers.  And that's just nasty.

I'm.. stumped.


May 17, 2005
I would suggest something like this:

template D3DXFRAME(S)
{
    LPSTR Name;
    D3DXMATRIX TransformationMatrix;
    D3DXMESHCONTAINER* pMeshContainer;
    S *pFrameSibling;
    S *pFrameFirstChild;
}

align(X) struct MyD3DXFRAME
{
    mixin D3DXFRAME!(MyD3DXFRAME);
    //your own stuff goes here....
}

Andrew.


"Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:d6bhag$2ve4$1@digitaldaemon.com...
> This is quite an interesting problem.
>
> In the DirectX SDK, there is a structure called D3DXFRAME.  This simply holds some data members that describe a link in a 3D hierarchy.  It doesn't really matter what it does; all it matters is that it's a struct.
>
> Now, here's the thing.  This struct _must_ be a struct, as the data members cannot be moved around or realigned.  This is because the internal workings of some of the SDK functions rely on the members being in certain places.
>
> But at the same time, I need to be able to derive from this struct so I can add my own custom data to it.  Which is currently impossible.  The SDK was designed with C++ in mind, which can do this.
>
> The worst part is that there isn't really a workaround.  I can't make the D3DXFRAME a class as there is no guarantee that the members will stay in the same order/alignment.  I can't make a parallel class that holds the extra data as there is no place for me to put a reference to the class instance in the D3DXFRAME structure.  About the only thing I _could_ do is to keep an associative array indexed by D3DXFRAME pointers.  And that's just nasty.
>
> I'm.. stumped.
> 


May 17, 2005
Jarrett Billingsley wrote:
> This is quite an interesting problem.
> 
> In the DirectX SDK, there is a structure called D3DXFRAME.  This simply holds some data members that describe a link in a 3D hierarchy.  It doesn't really matter what it does; all it matters is that it's a struct.
> 
> Now, here's the thing.  This struct _must_ be a struct, as the data members cannot be moved around or realigned.  This is because the internal workings of some of the SDK functions rely on the members being in certain places.
> 
> But at the same time, I need to be able to derive from this struct so I can add my own custom data to it.  Which is currently impossible.  The SDK was designed with C++ in mind, which can do this.
> 
> The worst part is that there isn't really a workaround.  I can't make the D3DXFRAME a class as there is no guarantee that the members will stay in the same order/alignment.  I can't make a parallel class that holds the extra data as there is no place for me to put a reference to the class instance in the D3DXFRAME structure.  About the only thing I _could_ do is to keep an associative array indexed by D3DXFRAME pointers.  And that's just nasty.
> 
> I'm.. stumped. 
> 
> 
template mixD3DXFRAME()
{
   float memberOne;
   float memberTwo;
}

struct D3DXFRAME
{
   mixin mixD3DXFRAME;
}

struct Inherited
{
   mixin mixD3DXFRAME;
   float memberThree;
}

Does this solve it?
May 17, 2005
"Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:d6bhag$2ve4$1@digitaldaemon.com...
> This is quite an interesting problem.
>
> In the DirectX SDK, there is a structure called D3DXFRAME.  This simply holds some data members that describe a link in a 3D hierarchy.  It doesn't really matter what it does; all it matters is that it's a struct.
>
> Now, here's the thing.  This struct _must_ be a struct, as the data members cannot be moved around or realigned.  This is because the internal workings of some of the SDK functions rely on the members being in certain places.
>
> But at the same time, I need to be able to derive from this struct so I can add my own custom data to it.  Which is currently impossible.  The SDK was designed with C++ in mind, which can do this.
>
> The worst part is that there isn't really a workaround.  I can't make the D3DXFRAME a class as there is no guarantee that the members will stay in the same order/alignment.  I can't make a parallel class that holds the extra data as there is no place for me to put a reference to the class instance in the D3DXFRAME structure.  About the only thing I _could_ do is to keep an associative array indexed by D3DXFRAME pointers.  And that's just nasty.
>
> I'm.. stumped.

old-school "inheritance":

struct D3DXFRAME { ... }
struct MyDXFrame {
  D3DXFRAME native;
  int whatever;
  ...
}
when calling a "native" OS function that takes a D3DXFRAME pass it the
native member.


May 19, 2005
"Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:d6bhag$2ve4$1@digitaldaemon.com...
> I'm.. stumped.

I'll try one of these solutions until (if) a real one comes.  Thanks guys :)