Краткий ответ - нет, в настоящее время это не поддерживается. Основная проблема с конкатенацией перечислимых типов связана с тем, что мы не просто объединяем два списка вещей, но мы объединяем типы. Возьмите ваш пример:
enum sup = {A, B, C};
enum sup2 = {D, E, F};
enum sup3 = sup ++ sup2;
Когда я сейчас пишу E
где-нибудь в выражении, я больше не знаю, имеет ли оно тип sup2
или sup3
. Как вы можете себе представить, нет гарантии, что E
будет иметь одинаковое значение (для решателя) в двух перечисленных типах, так что это может быть большой проблемой.
Проблески надежды, Команда MiniZin c работала над аналогичным подходом, чтобы сделать это возможным (но пока официально не объявлено). Вместо вашего синтаксиса можно написать:
enum X = {A, B, C};
enum Y = {D, E, F} ++ F(X);
Идея этого заключается в том, что F(X)
теперь дает конструктор для использования X
в Y
. Это означает, что если мы видим только A
, мы знаем, что он имеет тип X
, но если мы видим F(A)
, то он имеет тип Y
. Опять же, это пока невозможно, но, надеюсь, скоро появится в языке.