Pascal/Turbo Pascal - pasar tipo como parametro

   
Vista:

pasar tipo como parametro

Publicado por ptr (1 intervención) el 31/07/2015 01:13:35
Hola, necesito saber como se hace para pasar un tipo (TYPE) como parámetro.
A modo de ejemplo, dejo el pseudocódigo.
Primero defino un par de registros nodoA y nodoB con sus tipos y los respectivos ptr para crearlos dinámicamente.

type
ptrNodoA = ^nodoA;
nodoA = record
datoInt: integer;
datochar: char;
end;

ptrNodoB = ^nodoB;
nodoB = record
datoInt: integer;
datochar: char;
end;

SIN USAR OBJETOS - SIN USAR OBJETOS - SIN USAR OBJETOS:
------------------------------------------------------------------------------------------
Lo que pretendo es hacer un creador genérico de instancias usando new() de Pascal, donde necesito conocer el tipo del registro para hacer el cast y acceder a los campos.
Sería más o menos así:

procedure crearNodo(var p:pointer, tipoNodo:TYPE?????); << cómo pasar tipo o referencia de tipo ???
begin
new(tipoNodo(p));
tipoNodo(p).datoint := 0;
tipoNodo(p).datochar := 'x';
end;

¿Cómo se hace para pasarle a tipoNodo un valor que es un tipo, o la referencia de un tipo?

Gracias por tu molestia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

pasar tipo como parametro

Publicado por ramon (2072 intervenciones) el 31/07/2015 13:40:45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{Mira al tener dos registros iguales con uno creo que te servirá le paso los parámetros a la variable puntero
    typonodo y al final la libero}
 
program pasaparametros;
  uses
     crt;
  type
    ptrNodoA = ^nodoA;
       nodoA = record
      datoInt : integer;
     datochar : char;
    end;
 
    ptrNodoB = ^nodoB;
        nodoB = record
         datoInt : integer;
        datochar : char;
      end;
 
  var
    nodo : nodoa;
    typonodo : ptrnodoa;
 
    procedure creanodo(n : nodoa);
    begin
       new(typonodo);
       typonodo^.datoint := n.datoint;
       typonodo^.datochar := n.datochar;
    end;
 
   begin
       clrscr;
       write('     Entre Valor Numerico Entero : ');
       readln(nodo.datoint);
       write('     Entre dato char : ');
       readln(nodo.datochar);
       creanodo(nodo);
       clrscr;
       writeln('    Los Parametros Pasados son');
       writeln('    ',typonodo^.datoint,'    ',typonodo^.datochar);
       writeln;
       writeln('   ulse Una Tecla');
       readkey;
       dispose(typonodo);
   end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar