FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgTypeAliases

目次→教本→プログラマーのための案内Type Aliases←オリジナル・サイト

型の別名 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

変数や、オブジェクトの型のための、追加の名前

概要
宣言
多重定義の解決
手続きポインタへのポインタ
型の転送(先送り)
不完全な型

概要
型の別名は、型のための代替名称です。
型の別名は、1つの型から別の型まで、大量の変更を容易にするか、タイピングを少なくするか、循環依存ができるようにするために、使われます。

宣言
型の別名は、Type キーワードを使って、宣言します。それは、変数やオブジェクトを、ExternDim を使って宣言するのと、よく似ています。

The following example declares a type alias to Single called "float", a procedure, and defines and initializes two variables of that type:
下の例は、型 Single に "float" 手続き、と呼ぶ別名を宣言して、その型の2つの変数を、定義して、初期化します:

Type float As Single

Declare Function add (a As float, b As float) As float

Dim foo As float = 1.23
Dim bar As float = -4.56


手続きポインター型の別名は、同じ Function で宣言されます。下の例を、参照下さい。:

Declare Function f (ByRef As String) As Integer

Type func_t As Function (ByRef As String) As Integer

Dim func As func_t = @f

Function f (ByRef arg As String) As Integer
    Function = CInt (arg)
End Function


多重定義の解決
型の別名は、多重定義の解決に使います。 - エイリアスともいいます。
どの点から見ても、型の別名は、型の別名です。
それで、手続きの多重定義解決に関する限り、型 "alias_to_T" のパラメータで定義された手続きは、型 "T" のパラメータで定義された手続きと、同じです。(多重定義しているメンバー手続きに、同様に、適用されます)。

言い換えれば、それは、型と、型の別名だけが異なるパラメタの、手続きを宣言する、誤り(重複定義)です。
下の例を参照下さい。:

Type float As Single

Declare Sub f Overload (a As Single)

'' 下のコメントを外すと、これは、重複定義のエラーになります
'' Declare Sub f (a As float)


手続きポインタへのポインタ
手続きポインターへのポインターは、他のポインター型とよく似ています。これが、手続きポインターを指さすことだけが異なります。
手続きが関数(ptr は、戻り型にあてはまり、手続きにあてはまらないので)のときに、 手続きポインターを宣言する構文は、直接手続きポインターへのポインターを作れないので、型別名が使われます。

以下の例は、整数のポインタを返す手続きへの、ポインタを宣言します。そして、次に、整数を返す手続きへのポインタに、ポインタを宣言します:

Dim pf As Function() As Integer Ptr

Type pf_t As Function() As Integer
Dim ppf As pf_t Ptr


型の転送(先送り)
型の別名は、前方へ参照をつけることができます。
別名は、まだ詳細に定められていない他の型を指すことができます。

Type foo As bar

Type sometype
  f   As foo Ptr
End Type

Type bar
  st  As sometype
  a   As Integer
End Type


別名と、型の転送参照を使うと、型の間で循環依存ができます。

Type list As list_

Type listnode
  parent As list Ptr
  text As String
End Type

Type list_
  first As listnode Ptr
  count As Integer
End Type


不完全な型
型は、そのサイズ、すなわち、メモリでそれが占領する必要があるバイト数が知られて、その項目のすべてのオフセットが知られるまで、不完全であると考えられます。
不完全な型のために、スペースを割り当てることはできません。
不完全な型のデータ型を持つ変数を宣言すること、パラメタとして不完全な型をわたすこと、また、不完全な型のメンバーにアクセスすることは、できません。

しかし、ポインターのサイズは知られているので、不完全な型へのポインタは、割り当てられ、他の型のメンバーとして宣言され、手続きにパラメータとして渡されることができます。

Type sometype As sometype_

'' sometype のサイズが未知であるので、許容されません
'' TYPE incomplete
''   a AS sometype
'' END TYPE

'' ポインタのサイズが知られているので、許容されます
Type complete
  a As sometype Ptr
End Type

Dim x As complete

'' sometype のサイズがまだ未知なので、許容されません
'' DIM size_sometype AS INTEGER = SIZEOF ( sometype )

'' 型を完成させます
Type sometype_
  value As Integer
End Type

'' 型が、今完成するので、許容されます
Dim size_sometype As Integer = SizeOf ( sometype )

Type completed
  a As sometype
End Type

Dim size_completed As Integer = SizeOf ( completed )



プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2016-05-14 01:40:32
日本語翻訳:WATANABE Makoto、原文著作者:LaananFisher

ホームページのトップに戻る

表示-非営利-継承