Hello, Ron!
Ron Weidner wrote:
Your design is the right one for the problem, -and- FreePascal supports this design very well. What you seem to miss is the correspondence between your design ideas and FreePascal's syntax and semantics.Note: I don't see the definition of PWidget in your
code peace. I assume it's a pointer to a record containing a string
member named meta. But in your procedure
procedure AddWidget(PWidget:pointer);
you use the very same identifier, PWidget, for a
variable name. That's a bit confusing.
You are the 2nd person that I've talked to that seemed confused about this. Since I'm very new to pascal programming, I'm concerned that I may have a bad design. In an attempt to confirm a design problem I'm going to try to explain what I'm trying to do and ask for advice on a better way to do it.
Ok... Basically I have 3 objects that look like this...
Widget ---------------|---------- | | Container Widget Entity Widget
One of the defining differances between an Entity Widget and a Container widget is that a Container Widget can contain other widgets. (both other container widgets and entity widgets). So I needed to create a dynamic list (linked list) that could address either a container widget or an entity widget. So I created TWidgetList with the field 'widget' being an untyped pointer. Now that I have this list, I need to add addresses of _existing_ widgets to the list. So, when I call the method...
procedure AddWidget(PWidget:pointer);
I'm referring to a PWidget but I don't know of which
type. (container or entity)
During construction of an Entity or Container widget,
the string meta is set to identify what type of widget
it is. Now later, I can traverse the TWidgetList,
read the meta string, cast the widget pointer to the
right type and call the correct object methods. (Render() in this case.)
Is my code the long way around the barn or does it seem to make better sense explained?
Ron_W
Sorry, but before proceeding I ask you to make a decision (because else writing any code examples might be wasting our time):
FreePascal offers two different approaches to your design: Objects and Classes. Objects is what you're using now. Classes are essentially pointers to Objects, but they also simplify the syntax, and they allow pointer types to inherit from each other. This latter capability perfectly addresses the problem of choosing the right type for the parameter X in AddWidget(X). So, before proceeding, please decide if you want to continue using good old Objects, or if you want to switch to the newer and more powerful Classes. If unsure, choose Objects. Also, if you cannot easily change the declaration of a widget because it's legacy software, choose Objects. I'll then post code examples using the approach you choose.
Anton.
_______________________________________________ fpc-pascal maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-pascal