gpt4 book ai didi

packaging - Ada:包装概念

转载 作者:行者123 更新时间:2023-12-03 06:44:16 25 4
gpt4 key购买 nike

这是我之前发布的帖子的后续内容:

Ada: Understanding private types and understanding packaging

Rectangular 的实现类型是使用一种实现创建的,即 Rectangular_Method_1此实现需要一个规范文件和一个主体文件。

如果我们想要另一个实现 Rectangular_Method_2然后主文件 rectangular_Form.ads 可供用户使用可以改为

-- with Rectangular_Method_1;
-- package Rectangular_Form renames Rectangular_Method_1;
with Rectangular_Method_2;
package Rectangular_Form renames Rectangular_Method_2;

问题

  1. 这是软件工程中允许另一种实现的正确方法吗?测试文件 test_rectangular_form.adb对于不同的实现仍然相同吗?

  2. 如果我们创建第二个实现 Rectangular_Method_2 ,除了这个新的实现的强制性新主体之外,是否还需要创建一个单独的规范文件?然而,需要为 Vector_Basis_r 提供相同的过程/功能。 , Set_Horz , Get_Horz等在新的实现中,以便我们可以在 test_rectangular_form.adb 中调用它们.

谢谢...

最佳答案

如果您使用 GNAT,则可以在项目中使用 GPR 文件。您可以在其中更改特定包的文件名,例如:

for Specification (Rectangular_Form) use "Rectangular_Method_1.ads";
for Implementation (Rectangular_Form) use "Rectangular_Method_1.adb";

您甚至可以根据环境变量进行设置。

如果您的规范文件看起来应该相同,您可以使用 Rectangular_Form.ads并且仅使用上面的实现行。

GPR 文件示例如下所示:

project Example is

type Methods is ("normal", "something_else");
Method : Methods := external ("METHOD", "normal");

package Naming is
case Method is
when "normal" =>
for Implementation ("Example") use "example_normal.adb";
when "something_else" =>
for Implementation ("Example") use "example_something.adb";
end case;
end Naming;

end Example;

然后,您可以使用gnatmake -P example.gpr根据您的 METHOD 来编译它变量,或使用 -XMETHOD=... gnatmake 的参数或仅使用提供的默认值。

example_*.adb应该全部包含包的主体 Example ,不是Example_Normal等等.

关于packaging - Ada:包装概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com