Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
Improve this question
这是我之前的帖子的后续内容:
Ada: Understanding private types and understanding packaging
如果我们想为用户提供另一个实现
问题
这是软件工程中允许其他实现的正确方法,因为对于不同的实现,测试文件
如果我们创建第二个实现
谢谢...
您甚至可以根据环境变量进行设置。
如果规格文件的外观都相同,则可以使用
GPR文件示例如下所示:
然后,您可以根据您的
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
Improve this question
这是我之前的帖子的后续内容:
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;
问题
这是软件工程中允许其他实现的正确方法,因为对于不同的实现,测试文件
test_rectangular_form.adb
保持相同?如果我们创建第二个实现
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
,并且只能使用上方的Implementation行。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
对其进行编译,或者对gnatmake使用-XMETHOD=...
参数,或者仅使用提供的默认值。example_*.adb
应该全部包含包Example
的主体,而不是Example_Normal
等。08-27 18:00