struct inheritance need?
Janderson
ask at me.com
Wed Dec 17 08:17:38 PST 2008
Weed wrote:
> I should explain why it's important for me:
>
> For example, I am making a matrix object(s)
>
> It should be:
> - any size
> - with ability of making matrix instance of a given size in compile time.
> - ability of creating matrix instance in runtime.
>
> I have decided to make it struct because I need to create matrix
> object in compile time. in real program I'll need matricies of
> variable size and 3х1, 3х3, 6х6, 3х6 sizes (and may be other).
>
> I want to make matrix template and insert in it with mixin operator
> several structures of different sizes (and this structs are not store
> his dimensions in each instance, of course: variables width and height
> declared as invariant). By doing this I'll get several different
> structures (matrix_dynamic, matrix3x3, matrix6x6 etc)
>
> question is how those matricies can interoperate? They does not have
> common parent (structures does not have inheritance) , so I can't
> make common function for matricies of different sizes opAdd for
> example, and have to do functions for all types of matricies.
>
> How should I implement such a class In D properly?
> It possible in C++, but I like some of the language D
The classical approach is to have "helper" template functions.
Essentially:
void doOpearation(mymatrix)(...)
{
}
Note this is compiletime polymorphisms.
Now if you want to add runtime polymorphism it is impossible to get away
from a cost. You can use a wrapper class like so:
interface CommonMatrix
{
operation()...
}
class PolymorphicMatrix(mymatrix) : CommonMatrix
{
operation()...
}
You'll probably find though that PolymorphicMartix should be some higher
level concept, like car, or entity.
The great thing about these techniques is that they give a whole load
more power then just using inheritance alone because you can essentially
attach many different behaviors to that struct.
I hope that was helpful.
-Joel
More information about the Digitalmars-d-learn
mailing list