2017-08-05 2 views
0

定数へのアクセスを 変数に変換する適切な方法は何ですか? (はい、私はそれがこの変数を変更しないように注意する必要があることを知っています。Ada:定数へのアクセスを変数へのアクセスに変換する

多分Unchecked_Conversion

しかし:

  1. この 場合にはうまく動作するように標準で保証Unchecked_Conversionですか?

  2. Unchecked_Conversionより簡単な方法はありますか?

答えて

3

Unchecked_Conversionエイダはあなたにアクセスタイプのメモリレイアウトについての保証を与えるものではありませんので、その場合には動作は保証されません。おそらく、Adaは意図的にコンパイラに各アクセスタイプごとに一意のメモリレイアウトと意味を持たせることができます。

Convention => Cアスペクトをアクセスタイプに追加すると、Cはすべてのポインタが同じアドレス空間で動作するとみなすので、必要な共通メモリレイアウトを得ることができます。

2

[OK]進んでいるのは、どこかにパラメータモード(および型定義)の不一致があるということです。

はのは、いくつかの種類があります言ってみましょう:

Function Get_Handle (Object : in out aliased Window'Class)考える
Type Window(<>) is tagged private; 
Type Constant_Reference is not null constant access Window'Class; 
Type Reference is not null access Window'Class; 
Type Handle is access Window'Class; 

我々はおよそObject'Access言うことができるでしょうか?さて、WindowClassへのアクセスは一定ではありません。したがって、HandleReferenceの両方に対応していますが、Constant_Referenceではありません。

一方、Function Get_Handle (Object : aliased Window'Class)がある場合、Object'Accessは、in-parameterの一定の性質のためにConstant_Referenceと互換性のある匿名アクセスを生成します。

あなたのパラメータとデザインをチェックして、それがあなたの問題を引き起こしているかどうかを確認してください。