Во многих случаях при моделировании систем или прототипов удобно в качестве типа атрибута задавать не какой-то один конкретный тип, а целый набор возможных типов, например, в формате IFC в классе IfcPropertySingleValue в поле с именем NominalValue можно задать как целое, так вещественное или даже строковое значение, да при этом ещё и уточнить смысл этой величины, например, IfcSimpleValue/IfcReal (в этом случае значение NominalValue будет просто абстрактной величиной конкретного типа), IfcMeasureValue/IfcLengthMeasure (в этом случае NominalValue будет содержать измерение длины в указанных единицах), IfcDerivedMeasureValue/IfcFrequencyMeasure (в этом случае NominalValue будет содержать измерение частоты чего-либо). В EXPRESS подобные типы, разрешающие выбор, называются SELECT. SELECT может предоставлять выбор из любых возможных в EXPREEE типов, включая другие SELECTы, перечисляемые типы ENUMERATION и их коллекции. Упрощённо, аналогом SELECT в языке C++ является хорошо всем известный тип Variant, в .exp файле объявление типа SELECT выглядит следующим образом:
TYPE SelectType = SELECT
(RealType
,ReferenceType
,EnumType);
END_TYPE;
Читать далее «Язык EXPRESS. Глава 4. Тип данных SELECT.»