Ada中的访问者设计模式实现方式是通过使用记录类型和重载的子程序来实现的。它可以用于实现复杂的数据结构、算法和逻辑。
泛型是一种通用的编程概念,它使开发人员能够编写适用于不同数据类型的代码。在Ada中,泛型通过使用泛型包来实现。
下面是一个结合了访问者设计模式和泛型的示例代码:
generic
type Data_Type is private;
type Visitor_Type is private;
type Array_Type is array (Positive range <>) of Data_Type;
package Visitor_Package is
type Visitor_Access is access function (Data : not null access constant Data_Type) return Visitor_Type;
procedure Apply_Visitor (Array : in out Array_Type; Visit : Visitor_Access);
end Visitor_Package;
with Visitor_Package;
procedure Main is
type Element_Type is (One, Two, Three);
type Element_Array_Type is array (Element_Type) of Integer;
function Visitation_Function (Data : not null access constant Integer) return Element_Type is
begin
if Data.all > 10 then
return One;
elsif Data.all > 5 then
return Two;
else
return Three;
end if;
end Visitation_Function;
function Conversion_Function (Data : Integer) return Integer is
begin
return Data * 2;
end Conversion_Function;
package Integer_Visitor is new Visitor_Package (Data_Type => Integer,
Visitor_Type => Element_Type,
Array_Type => Element_Array_Type);
Integers : Element_Array_Type := (One => 7, Two => 12, Three => 4);
begin
Integer_Visitor.Apply_Visitor (Integers'Access, Visitor_Access => Visit_Policy);
-- Integers now has [Three => 8, Two => 2, One => 14];
Integers (One) := 50; -- This will trigger a different kind of visitor event.
Integer_Visitor.Apply_Visitor (Integers'Access, Visitor_Access => Convert_Policy);
-- Integers now has [Three => 16, Two => 24, One => 100];
end Main;
在这个示例中,我们定义了一个泛型访问者包Visitor_Package
,它接受一个数据类型Data_Type
、一个访问者类型Visitor_Type
以及一个数组类型`Array
下一篇:Ada的刻度超过了最大值18。