2012-03-09 22 views
0

コンパイル時ではなく実行時にジェネリックをどのようにインスタンス化しますか?新規を使用しない例。実行時のAdaジェネリック

+0

注記:ジェネリックをインスタンス化すると、メモリをポインタに割り当てるときに、新規と微妙に異なる場合があります。あなたはそれを使いたくないのですか? – NWS

+0

質問を明確にすることはできますか?私の(現在の)理解は、すべてのインスタンス化(論理的)が実行時に行われるということですが、汎用テンプレートのコード展開は常にコンパイル時に行われます。あなたは正確に何を達成しようとしていますか、なぜあなたは 'new'キーワードを避けることに気を配っていますか? –

答えて

2

newを使用せずにこれを行うことはできません。どの宣言的セクションでも行うことができますが、ジェネリックはその宣言的セクションのスコープの存続期間中のみ存在します。例えば

(コンパイルされていないADAのような擬似コード):

get(length) 
declare 
    package stack is new stack_generic (max_stack_size => length); 
begin 
    stack.push(); 
    ... 
end; 
-- stack package no longer in scope. 

は、このヘルプをしていますか?

+0

はい、これはトンに役立ちます、私は割り当てが記述された方法が混乱していたと思います。新しいものを使用しないことについての全部が混乱していました。 – sergio

+0

いいえ問題:)また、これは宿題の場合は、質問に宿題タグを追加することができます。 – NWS

+0

Ahh okはhwタグについて考えることさえしません。だから私の理解から、これはヒープの代わりにシステムスタックにスタックを割り当てるでしょうか? – sergio

関連する問題