Making containers that "go both ways"
Bill Baxter
dnewsgroup at billbaxter.com
Sat Jan 26 10:26:59 PST 2008
janderson wrote:
> Bill Baxter wrote:
> > Hey,
> > Just wanted to throw this idea out for comment.
> > I find I can't really decide whether a container class should be a
> struct or a class. Struct feels right if I want minimal overhead and
> something that works more like a built-in datatype. But class feels
> right for situations where I'm less concerned about performance
>
>
> Personally I'd make it a class. Yes its going to go on the heap however
> the resizeable array part or whatever the container contains, will
> probably go on the heap anyway.
>
> , and
> > also offers the additional ability to extend the basic functionality
> via subclassing.
>
> I think you should avoid thinking about subclassing like this. Using
> mixins or components is a much better idea then subclassing. Subclassing
> should normally be used for polymorphism.
Yeh, I don't actually ever do that myself, but I hear that some people
do, at least in other languages. That's why I mentioned it. Anyway, if
I subclass Container to attach some additional info it, or do something
slightly different, but still pass it to the original Container-using
code how would that that not constitute subclassing for polymorphism?
But it's strange you say "make it a class" and then turn around and say
"but don't use the main property of classes that distinguish them from
structs". If you want to discourage subclassing of containers, what
could be better than making them structs so that it's actually impossible?
> > So something I did (a while back now...) was to create some
> containers in OpenMesh/D that use mixins for all their guts, and provide
> both struct and class wrappers for them.
> >
> > It seems to me like that might be the "right" way to do containers in
> D. Somewhat unfortunately, because it's more complicated than just
> writing one or the other.
> This may help:
> http://www.artima.com/intv/goldilocks3.html
Not really. He's talking about C++, where classes and structs are the
same thing.
"""
Bjarne Stroustrup: My rule of thumb is that you should have a real class
with an interface and a hidden representation if and only if you can
consider an invariant for the class.
"""
The distinction he's making is between making everything public vs
having private data members with API functions to do all the
manipulation. That choice applies equally to either structs or classes
in D.
--bb
More information about the Digitalmars-d
mailing list