D - virtual data?
- Russ Lewis (28/28) Aug 22 2001 I've often wanted to do things like this:
- D Man (8/36) Aug 23 2001 I wanted to do the same with enumerations. I made a post a while back w...
- Russ Lewis (6/11) Aug 23 2001 I'm trying to think of a good example without exposing internal code. :(...
I've often wanted to do things like this:
class Foo {...};
class Foo2 : public Foo {...};
class Bar
{
protected:
virtual Foo foo;
};
class Bar2 : public Bar
{
protected:
Foo2 foo;
};
The idea here is that the Bar class uses the Foo class as part of its
implementation. The Bar2 class uses a more advanced version of Bar
(that is, a child of Bar) to implement some more advanced
functionality. I want the Foo2 object to *replace* the Foo object so
that all code written in Bar that access the Foo object will now make
the same calls on the Foo2 object. (I can give more detailed sample
code if somebody is interested how this comes into play.)
This didn't work in C++ because the vtable was constructed iteratively;
the most base-level object would first construct its vtable and all of
its data, and you would work up from there, modifying the vtable as each
successive child is constructed. Since D constructs the entire vtable
before any constructors are called, it would be possible for the vtable
to include pointers to virtual data members. It should work as long as
the new class (overriding the old one) is a public child of the base
class.
Aug 22 2001
I wanted to do the same with enumerations. I made a post a while back with
the info, but basically you could extend or override the set of values in an
enumerated set.
It "may" be nice to do that with data, but i would like to see a few
real-world examples of this functionality.
Cool idea, nonetheless.
"Russ Lewis" <russ deming-os.org> wrote in message
news:3B8413AE.91A954AF deming-os.org...
I've often wanted to do things like this:
class Foo {...};
class Foo2 : public Foo {...};
class Bar
{
protected:
virtual Foo foo;
};
class Bar2 : public Bar
{
protected:
Foo2 foo;
};
The idea here is that the Bar class uses the Foo class as part of its
implementation. The Bar2 class uses a more advanced version of Bar
(that is, a child of Bar) to implement some more advanced
functionality. I want the Foo2 object to *replace* the Foo object so
that all code written in Bar that access the Foo object will now make
the same calls on the Foo2 object. (I can give more detailed sample
code if somebody is interested how this comes into play.)
This didn't work in C++ because the vtable was constructed iteratively;
the most base-level object would first construct its vtable and all of
its data, and you would work up from there, modifying the vtable as each
successive child is constructed. Since D constructs the entire vtable
before any constructors are called, it would be possible for the vtable
to include pointers to virtual data members. It should work as long as
the new class (overriding the old one) is a public child of the base
class.
Aug 23 2001
D Man wrote:I wanted to do the same with enumerations. I made a post a while back with the info, but basically you could extend or override the set of values in an enumerated set. It "may" be nice to do that with data, but i would like to see a few real-world examples of this functionality.I'm trying to think of a good example without exposing internal code. :( I have a *great* example of why this is useful (that I developed as a senior project for school), but my company has not yet said that I can GPL it - until then it's company property. I'll keep thinking to see if I can find a good example w/o exposing too much. :(
Aug 23 2001








Russ Lewis <russ deming-os.org>