En Delphi, como dices, hay un recurso similar usando la directiva {$I archivo.inc}, pero, realmente no tendrás dos unidades distintas, simplemente estás
incluyendo un archivo en otro, de forma que es como si el contenido del archivo externo lo hubieras escrito en el punto donde está la directiva.
Por otro lado, este problema puede resolverse definiendo clases abstractas en una unidad:
Código Delphi
[-]
type
TVisitante = class;
TElemento = class
procedure Aceptar(Visitante: TVisitante); virtual; abstract;
end;
TVisitante = class
procedure Visitar(Elemento: TElemento); virtual; abstract;
end;
En esta unidad no implementas nada, pero ya puedes incluirla en las unidades de las clases descendientes:
Código Delphi
[-]
unit UnElemento;
interface
uses patronvisitante;
type
TUnElemento = class(TElemento)
procedure Aceptar(Visitante: TVisitante); override;
end;
implementation
procedure TUnVisitante.Aceptar(Visitante: TVisitante);
begin
...
end;
end.
Código Delphi
[-]
unit UnVisitante;
interface
uses patronvisitante;
type
TUnVisitante = class(TVisitante)
procedure Visitar(Elemento: TElemento); override;
end;
implementation
procedure Visitar(Elemento: TElemento);
begin
...
end;
end.
// Saludos