Generics 运行时的Ada泛型

Generics 运行时的Ada泛型,generics,runtime,stack,ada,Generics,Runtime,Stack,Ada,如何在运行时而不是编译时实例化泛型。不使用新的示例 如果不使用new,则无法执行此操作。您可以在任何声明性部分中执行此操作,但是泛型将仅在该声明性部分的范围内存在 例如(未编译类似于ada的伪代码): 这有用吗 注意:实例化泛型时的New与为指针分配内存时的New略有不同。这就是你不想使用它的原因吗?你能澄清这个问题吗?我(目前)的理解是,所有的实例化(逻辑上)都发生在运行时——但泛型模板的代码扩展总是发生在编译时。你到底想完成什么?为什么你要避免使用new关键字?是的,这很有帮助,我认为作业描

如何在运行时而不是编译时实例化泛型。不使用新的示例

如果不使用
new
,则无法执行此操作。您可以在任何声明性部分中执行此操作,但是泛型将仅在该声明性部分的范围内存在

例如(未编译类似于ada的伪代码):


这有用吗

注意:实例化泛型时的New与为指针分配内存时的New略有不同。这就是你不想使用它的原因吗?你能澄清这个问题吗?我(目前)的理解是,所有的实例化(逻辑上)都发生在运行时——但泛型模板的代码扩展总是发生在编译时。你到底想完成什么?为什么你要避免使用
new
关键字?是的,这很有帮助,我认为作业描述的方式令人困惑。不使用new的整个过程让人困惑。没问题:)另外,如果这是作业,你可以在你的问题上添加一个作业标签:)啊,好的,我会做的。我甚至没想过hw标签。根据我的理解,这将在系统堆栈中分配堆栈,而不是正确的堆堆栈。(我想!),但是堆栈中的任何动态声明都会在堆上。看,我刚刚和我的老师谈过,这样做时,它被分配到堆栈中,而不是堆中。因此,当您超出声明块的开始端时,内存将被释放,堆栈将恢复到声明任何内容之前的状态我花了好几个小时试图弄明白这一点,现在这很有意义。非常感谢!!
get(length)
declare
   package stack is new stack_generic (max_stack_size => length);
begin
   stack.push();
   ...
end;
-- stack package no longer in scope.