C++ member function translations
Bill Baxter
dnewsgroup at billbaxter.com
Fri Jul 27 13:18:44 PDT 2007
Daniel919 wrote:
> Classes are always passed by reference, so there is no need for &.
> Structs are value types, they don't have a reference, so a ptr has to be
> used.
Can't you at least use a 'ref StBar' as a parameter?
And in response to Christian -- I would have expected 'const ref StBar'
to be the way to translate 'const StBar&' from C++. That doesn't work?
Note that in C++ you can't re-bind a reference, so they're effectively
like D final. Thus in terms of acting like C++ it makes sense for const
to apply to both the ref and the contents. ..... hmm but I guess 'ref'
isn't a type constructor in D it's just a parameter passing mechanism.
Bummer.
Anyway, that's a big disappointment because passing large structs around
by const references was one of the main reasons I wanted D to get const.
But it's not possible.
> It's not possible to overload member functions by attribute.
> So this is not possible:
> class Foo {
> const void func() {/*don't change any fields*/}
> void func() {/*changes might happen*/}
> }
> Just like it's neither possible to overload by public / private.
I thought 'const' served as a type constructor not an attribute. But
you're saying D's 'const' applied to a method isn't just changing the
type of the hidden 'this' parameter, it's an attribute of the whole
method instead? Odd. Does that approach have some great virtue to it?
> > C++: const Foo& func(const Bar&) const;
> const const(ClFoo) cfunc(const(StBar)*)
> const const(StFoo)* cfunc(const(StBar)*)
>
> > C++: const Foo& func(Bar&) const;
> const const(ClFoo) cfunc(StBar*)
> const const(StFoo)* cfunc(StBar*)
>
> > C++: const Foo& func(const Bar&);
> const(ClFoo) func(const(StBar)*)
> const(StFoo)* func(const(StBar)*)
>
> > C++: const Foo& func(Bar&);
> const(ClFoo) func(StBar*)
> const(StFoo)* func(StBar*)
>
> > C++: Foo& func(Bar&) const;
> const ClFoo cfunc(StBar*)
> const StFoo* cfunc(StBar*)
>
> > C++: Foo& func(Bar&);
> ClFoo func(StBar*)
> StFoo* func(StBar*)
A lot of parentheses and stars. :-(
--bb
--bb
More information about the Digitalmars-d-learn
mailing list