ADA - hacer llama a unidades genericas

 
Vista:

hacer llama a unidades genericas

Publicado por predator (2 intervenciones) el 01/05/2007 20:37:57
hice una unidad generica con:

generic

type Tipo_dato is private;
with function "<" (X, Y: Tipo_dato) return Boolean;
with function ">=" (X, Y: Tipo_dato) return Boolean;
with procedure get (x: in out Tipo_dato); -- get para tipos escalar:enteros, enumerados, reales
with procedure get_line (x: in out Tipo_dato; dim:in out natural); --get para string

mi pregunta es si se puede en el programa principal instanciar a no todos los parametros genericos
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
Imágen de perfil de Alejandro

Instanciar parámetros genéricos selectivamente en una unidad genérica

Publicado por Alejandro (155 intervenciones) el 30/06/2023 19:03:07
Sí, es posible instanciar solo algunos de los parámetros genéricos en el programa principal. En Ada, al utilizar una unidad genérica, tienes la flexibilidad de proporcionar valores concretos para los parámetros genéricos que deseas utilizar, mientras que los demás pueden permanecer abiertos.

Aquí hay un ejemplo de cómo podrías instanciar solo algunos de los parámetros genéricos en el programa principal:

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
with Ada.Text_IO;
 
procedure Programa_Principal is
   generic
      type Tipo_Dato is private;
      with function "<" (X, Y: Tipo_Dato) return Boolean;
      with function ">=" (X, Y: Tipo_Dato) return Boolean;
      with procedure Get (X: in out Tipo_Dato); -- get para tipos escalar: enteros, enumerados, reales
      with procedure Get_Line (X: in out Tipo_Dato; Dim: in out Natural); -- get para string
 
   package Mi_Unidad is
      -- Implementación de la unidad genérica
   end Mi_Unidad;
 
   -- Instanciar solo algunos parámetros genéricos
   package Enteros is new Mi_Unidad(Tipo_Dato => Integer, "<" => "<", ">=" => ">=", Get => Ada.Text_IO.Get);
   package Strings is new Mi_Unidad(Tipo_Dato => String, "<" => "<", ">=" => ">=", Get_Line => Ada.Text_IO.Get_Line);
 
   -- Usar las instancias
   X : Integer;
   S : String(1..100);
begin
   Enteros.Get(X);
   Strings.Get_Line(S, S'Length');
 
   -- Resto del código del programa principal
end Programa_Principal;

En este ejemplo, se instancian dos versiones de la unidad genérica `Mi_Unidad`. La primera instancia, `Enteros`, se utiliza con el tipo `Integer` y la operación `<` de Ada, así como la función `Get` de `Ada.Text_IO`. La segunda instancia, `Strings`, se utiliza con el tipo `String` y la operación `<` de Ada, así como la función `Get_Line` de `Ada.Text_IO`.

Ten en cuenta que en el programa principal puedes instanciar y utilizar tantas versiones de la unidad genérica como necesites, proporcionando los parámetros genéricos adecuados para cada instancia.
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