我想声明一些“用户定义的编译器常量”,以使我的规范文件尽可能保持“常量”。这在 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 的合理映射:
首先,我认为或多或少对应于您的namespace misc
,在文件中misc.ads
,
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;
我个人不会use Config;
,至少在规范中 - 它可能会让人很难弄清楚某些东西是在哪里定义的。注意,你可以说use Config;
or use Misc.Config;
如图所示,因为您是Misc
;在上下文子句中,这也可以,你必须use Misc.Config;
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)