facebook twitter hatena line google mixi email
★お気に入り追加


■ このスレッドは過去ログ倉庫に格納されています

  • 558
  •  
  • 2014/03/18(火) 22:55:44.93
>>548
一言でいえば、(C言語のような)静的型付け言語で動的型付けを実現する手法

そのコードであれば、データ型 A はコンパイル時に(=静的に)決定するけど、
実際の型である「整数 または 文字列」は実行時に(=動的に)決まる
そして実行時には変数 type の値によって実際の型を判別する
おそらくそのコードの周辺では、以下のような変数 type へ代入される
定数の一覧が定義されているはず
 const int NUM = 1; const int STRING = 2;
ここで、「X または Y」を実現するために共用体 union が使われ、
その共用体と型判別変数とを組み立てるために構造体 struct が使われる

なお、>>548のコードだと型判別変数はint型で宣言されているけど、
もし可能であるなら、以下のように列挙型で宣言することが望ましい
 enum type_t { NUM =1, STRING = 2 };
 struct A { .... ; type_t type };

また、この手法はPascalやAdaといった言語では「可変レコード型(variant record
type」として言語仕様の一部となっており、このC言語の手法を直接的に定義できる
さらに、完全なデータ型システムを備えたMLやHaskellといった言語では、
可変レコード型よりも表現力が豊かでかつ型安全な仕掛けが提供されている

ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email
おすすめワード