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

FreeBASIC Type (Temporary)

目次→言語リファレンス→変数とデータ型→ユーザ定義型Type (Temporary)←オリジナル・サイト

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


ユーザ定義型の、一時的なコピーを作成します。

構文:
result = Type( initializers, ... )
または
result = Type<typename>( initializers, ... )

パラメタ:
initializers
型の初期値(または最初の値のみ)
typename
TypeUnion の名前

戻り値:
型の、一時的なコピー。

記述:
一時的な 型 を作成するために、使います。
typename を、明示的に 与えないと、typename は、できれば、用法から推論されます。
一時的なコピーを使うと、それを変数に割り当てたり、それをパラメタとして手続きに渡したり、あるいは、それを手続きからの値として返すことができます。

自身の、あるいは継承した構築子のない型(直接的または間接的に Object から派生した型も除く)については、すべての型のデータ項目(継承されたものを含む)が、数値プリミティブだけで、デフォルトの初期化子がない場合には、一時的な型構文が許されます。
同時に、型が破壊子を持たないならば、コンパイラは一時コピーを使う代わりに、直接代入をします。

型の Constructor は、それが 1 つであれば、一時的なコピーを作るとき、呼ばれます。
そして、型の Destructor は、1つあれば、一時的なコピーを使った直後、呼ばれます。
しかし、構築子がいる場合、一時的型の式は、typename( initializers, ... ) と単に取り替えられます。

これは、ユーザー定義型の一時的コピーだけでなく、可変長文字列や、どんな数のデータ型(固定長文字列を除くすべての標準的なデータ型)としての、あらかじめ定義されたデータ型の一時的コピーも、作成することができます。

また、すべてのデータ項目(または最初の n のみ)を変更する場合、With よりも短縮されたショートカットとして使うこともできます。(下の例を参照下さい。)

一時オブジェクトは、文の実行終了時(定義されている場所)に破棄されますが、対応する割り当てられたメモリは解放されず、文が存在するスコープから出るまで使用可能(未使用)のままになります。

注:手続き定義レベルで使われる Static 修飾子は、一時的な型には適用されません。

例:
Type Example
    As Integer field1
    As Integer field2
End Type

Dim ex As Example

'' 各項目を設定して、型を満たします
ex.field1 = 1
ex.field2 = 2

'' WITH を使って、各項目を設定して、型を満たします
With ex
    .field1 = 1
    .field2 = 2
End With

'' 一時的な型で、変数の項目を満たします
ex = Type( 1, 2 )



'' ユーザ定義型を、型を推論できる一時的な型を使って、
'' 手続きに渡します。

Type S
  As Single x, y
End Type

Sub test ( v As S )
  Print "S", v.x, v.y
End Sub

test( Type( 1, 2 ) )
Sleep



'' ユーザ定義型を、一時的な型を使っている手続きに渡します。
'' 一時的な型では、型があいまいで、型の名前を指定しなければなりません。

Type S
  As Single x, y
End Type

Type T
  As Integer x, y
End Type

Union U
  As Integer x, y
End Union

'' test() の多重定義手続き
Sub test Overload ( v As S )
  Print "S", v.x, v.y
End Sub

Sub test ( v As T )
  Print "T", v.x, v.y
End Sub

Sub test ( v As U )
  Print "U", v.x, v.y
End Sub

'' test( type( 1, 2 ) )
'' だと、不明瞭なので、働きません

'' 代わりの型の名前を、指定します
test( type<S>( 1, 2 ) )
test( type<T>( 1, 2 ) )
test( type<U>( 1 ) )
Sleep



QBからの違い:

参照:
ユーザ定義型 に戻る
プログラマーのための案内 に戻る

←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2023-07-09 04:38:07
日本語翻訳:WATANABE Makoto、原文著作者:VirusScanner

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

表示-非営利-継承