首页 > 解决方案 > 如何使通用形式参数别名

问题描述

我正在尝试像这样声明一个形式参数:

generic
   S : aliased String;
package My_Package is
   Str : access constant String := S'Access;
end;

但是这段代码无法编译。为什么我不能让 S 别名?

标签: genericsada

解决方案


简单的答案是:因为 Ada 标准不允许这样做。至于为什么不允许,我不知道;我不知道有任何关于这个问题的讨论。

你为什么要这样做?

您的示例代码当然在其他方面也不正确:Str 的初始化应该提供一个访问值,而不是像 S 这样的字符串值。但是您不能使用 S'Access,因为 S 没有别名。

使用 GNAT,您可以使用 S'Unrestricted_Access,即使正式对象没有别名。如果你这样做,你应该对正式对象使用“in out”模式;这将使它像重命名一样,或多或少等同于传递引用。


推荐阅读