Re: Does object have function?
"Jim Langston" <email@example.com> wrote:
My form is derived from the functionality I want which is this:
In my program I have a collection of objects in the world. These objects
can be anything and I derive from a base class so I can put the objects in
the same collection.
That's not a good reason to derive all of these diverse classes from the
same class. If the only reason they are all derived from the same class
is so you can put them in one collection, then I would call that a
Now, any object that has a model should have a functioning display routine.
So I simply iterate through (or choose a specific) object then try to
display it. A function object won't necessarily have a display routine
(unless I add one representing a function somehow. Maybe a big f()).
Now we see that there are two sorts of objects, those that can display
themselves and those that can't. That calls for two collections, not one.
My intention to hold ambigious data in one container stems from the fact
that these objects will be created by the end user by various means. A
sphere, a function, a ball, a race car, a web address, whatever types can be
Again, different objects are created different ways. That doesn't call
for them to all be put in the same collection.
Now when I display the user space I want to iterate over these objects and
display any that are displayable.
For this first use it is relatively easy and the solution here works but not
as well as I'd like for my purposes.
In the future I may wish to do other things to objects, if it's a function
to call the function with some parameters (which will probably also be
stored in objects). Then I'll have to add antoehr virtual function to base.
And another. And another. And eventually base will be a humongous class
with thousands of possible calls that can be called on each object.
I would rather be able to simply say:
std::map<std::wstring, jglObject>::iterator it = /*a valid map location*/
But as it is I can't unless I've created display in base as a virtual
Yes, I am fully aware that this is dangerous for the reason that I presume
.display() is going to display the object in OpenGL in my current window,
but perhaps this is not a model, but soemthing else and .display() just
happens to have the same name and breaks code when I execute it.
This is most likely the reason C++ doesn't do what I want it to do, strong
No language does what you want. Even smalltalk (where everything is
bound as late as possible,) would error out at runtime when you sent a
"display" message to something that didn't know what to do with the
I am not sure if there is, currently, a [better] solution to my problem or
not. I am just not happy with the current state of affairs. Unless someone
can suggest a better design that gets rid of this "problem".
Stop mixing your displayable objects with your non-displayable objects.