gpt4 book ai didi

packaging - Ada 中类型/包别名的单独声明

转载 作者:行者123 更新时间:2023-12-02 05:44:39 24 4
gpt4 key购买 nike

我想声明一些“用户定义的编译器常量”,以使我的规范文件尽可能保持“常量”。这在 C++ 中很常见,例如:

// misc/config.hh
namespace misc
{
typedef std::shared_ptr<A> A_ptr;
namespace arch = ibmpc;
}

// misc/code.hh
#include "misc/config.hh"
namespace misc
{
void function p(A_ptr a);
}

这将在 Ada 中:

-- misc.ads
package Misc is
use Types; ----> forbidden !

procedure P(A : A_Access);
end Misc;

-- misc-types.ads
package Misc.Types is
type A_Access is A'Access;
end Misc.Types;

当然这是行不通的,因为 use 是一个上下文关键字...因此我的问题是:如何在 Ada 中执行相同的结果?

最佳答案

我认为这是从您的 C++ 原始版本到 Ada 的合理映射:

首先,我认为或多或少对应于文件 misc.ads 中的 namespace misc

package Misc is
end Misc;

然后,对应config.hh,在misc-config.ads文件中,

package Misc.Config is
type A is (For_Example, An_Enumeration);
type A_Access is access A;
end Misc.Config;

(当然,它也可以引用 Misc 中的类型)。然后,对应code.hh,在misc-code.ads文件中,

with Misc.Config;
package Misc.Code is
use Config;
procedure P (A : A_Access);
end Misc.Code;

就我个人而言,我不会使用 Config;,无论如何在规范中 - 它会让人很难弄清楚在哪里定义了某些东西。请注意,您可以在显示的位置说use Config;use Misc.Config;,因为您在Misc 的子项中;在 context 子句中,这也是可以的,您必须 use Misc.Config;

关于packaging - Ada 中类型/包别名的单独声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10434117/

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