指向性メモ::2006-07-28

ページ情報
制作日
2006-07-28T03:33:28+09:00
最終更新日
2006-07-28T08:39:58+09:00

制約とStringとRecord

Created:
2006-07-28T03:33:28+09:00

レコード(とか配列とか)の要素に文字列を入れる場合の定石が分からなくて困る。

String(1 .. 512)
たぶん元Cプログラマ。Adaではおすすめできない?
Ada.Strings.Unbounded.Unbounded_String
お手軽思考。現実的にはこれが1番使われてる?
access String
05から匿名でaccess出来るようになったらしい。この場合allは無くてもaliased'Addressを受け取れる。OOPとの相性は良い?

制約しないとreocrdの要素につっこめないのが不便なんだよな。副プログラムのパラメタは普通Stringで宣言するからUnboundedだと変換がめどい。かといってaccessでも'Addressとか.allがそのたびに必要になるんだよな。それにしてもAda.Strings.Boundedは使い道無いなぁ。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2006/07/28/033328

protected objectのprivateが微妙に不便な件

Created:
2006-07-28T08:39:58+09:00

protected内のprivateな部分に型の定義を宣言することは出来ないのだが、これが微妙にイライラする。

with Ada.Containers.Indefinite_Doubly_Linked_Lists;

package Message_Buffers is
   type Private_Buffer is private; -- 別に公開したくない
   protected type Message_Buffer is
      entry Write(Item : String);
      entry Read(Item : out String);
   private
      -- ここに書けない!
      -- type String_Access is access all String;
      -- package String_Access_Lists is new Ada.Containers.Indefinite_Doubly_Linked_Lists(String_Access);
      Buffer : Private_Buffer;
   end Message_Buffer;
   
private
   type String_Access is access all String;
   package String_Access_Lists is new Ada.Containers.Indefinite_Doubly_Linked_Lists(String_Access);
   type Private_Buffer is new String_Access_Lists.List with null record; -- ずいぶん冗長なことに
end Message_Buffers;

Private_Buffer自体は内部でしか使わないので、外に公開したくな。しかし、Message_Bufferを公開する以上、それに先だって宣言しなければエラーとなる。privateだけ分割できないものか。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2006/07/28/083958
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator