定数へのアクセスを 変数に変換する適切な方法は何ですか? (はい、私はそれがこの変数を変更しないように注意する必要があることを知っています。Ada:定数へのアクセスを変数へのアクセスに変換する
多分Unchecked_Conversion
?
しかし:
この 場合にはうまく動作するように標準で保証
Unchecked_Conversion
ですか?Unchecked_Conversion
より簡単な方法はありますか?
定数へのアクセスを 変数に変換する適切な方法は何ですか? (はい、私はそれがこの変数を変更しないように注意する必要があることを知っています。Ada:定数へのアクセスを変数へのアクセスに変換する
多分Unchecked_Conversion
?
しかし:
この 場合にはうまく動作するように標準で保証Unchecked_Conversion
ですか?
Unchecked_Conversion
より簡単な方法はありますか?
Unchecked_Conversion
エイダはあなたにアクセスタイプのメモリレイアウトについての保証を与えるものではありませんので、その場合には動作は保証されません。おそらく、Adaは意図的にコンパイラに各アクセスタイプごとに一意のメモリレイアウトと意味を持たせることができます。
Convention => C
アスペクトをアクセスタイプに追加すると、Cはすべてのポインタが同じアドレス空間で動作するとみなすので、必要な共通メモリレイアウトを得ることができます。
[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へのアクセスは一定ではありません。したがって、Handle
とReference
の両方に対応していますが、Constant_Reference
ではありません。
一方、Function Get_Handle (Object : aliased Window'Class)
がある場合、Object'Access
は、in-parameterの一定の性質のためにConstant_Reference
と互換性のある匿名アクセスを生成します。
あなたのパラメータとデザインをチェックして、それがあなたの問題を引き起こしているかどうかを確認してください。