Re: how do i implement double-dispatching?

From: cl1motorsports (cwlambert76_at_yahoo.com)
Date: 12/20/03


Date: Sat, 20 Dec 2003 00:27:19 -0600

On Wed, 17 Dec 2003 12:08:41 -0600, cl1motorsports wrote:
<snip>
> package body Abstract_Visitor is
>
> procedure Accept_Visitor(V : in out Visitor_Record'Class; Node : in Parse_Tree_Node_Record'Class) is
> begin
> Visit(V, Node);
> end Accept_Visitor;
>
> end Abstract_Visitor;
>
> -- END OF CODE
<snip>

thanks for all of your suggestions. after careful consideration i decided
to change the above Accept_Visitor procedure to:

procedure Accept_Vistor(V:in out Visitor_Record'Class; Node : in Parse_Tree_Node_Record'Class) is
begin
  if Node in Equal_Op'Class then
        Visit(V, Equal_Op(Node));
  elsif Node in Number_Node'Class then
        Visit(V, Number_Node(Node));
  ...
  end if;
end Accept_Visitor;

now it only dynamically dispatches on the Visitor_Record'Class and the
Node parameter is determined at compile time. I don't think i would have
figured that out by myself (at least not at this point in time).

and just to let y'all know. I'm trying to write a C to Ada translator. The
first task on my list is to handle #define statements. I'm sure this
should be in another thread if a topic gets started on this. But I thought
it would be nice to let y'all know what you were helping me with here.

Thanks again everyone

[:^)



Relevant Pages