型は型IDを持つ。型IDから型情報を取得できる。型はその名前とデータサイズを有する。型には種類(kind)がある。

typedef std::string Name;
typedef std::size_t ID;

enum Kind
{
Kind_Integer, Kind_Structure, ...
};

struct TypeInfo
{
ID m_type_id; //型のID
Name m_name; //型の名前
Kind m_kind; //型の種類
std::size_t m_data_size; //型のデータサイズ
ID m_sub_id; // 副次情報。型の種類によって意味が異なる。
};

std::map<Name, TypeInfo> type_info;