Дизайн предложения метаклассы

Игорь Шаповал
Игорь Шаповал

В текущем предложении по метаклассам одобрен синтаксис

constexpr void interface(meta::type target, meta::type source) {
   ...
}

Сдесь не понятно. Это функция или метакласс? Подобная ситуация с terse syntax для концептов: это тип или концепт? Поскольку метакласс - это сущность времени компиляции, то следующий синтаксис более выразителен

constexpr class interface {
   ...
}

Не нужно добавлять новые слова. Насчет source и target, то лучше ввести два ключевые слова in, out на подобие this. Или сделать встроенные объекты: target, source, compiler.

for (auto f : in.functions()) {
   if (f.is_copy() || f.is_move()) {
        compiler.error("this type may not have a copy or move function" , f);
   }
} 

И определение сделать проще и естествение. Вместо

class(interface) Shape { ... };

Сделать вот так

interface Shape { ... };

Этот синтаксис на много лучше. Но пока, рефлексия и кодогенерация не будет принята, окончательный синтаксис метаклассов будет менятся.

 

 

 

 

 

5
рейтинг
2 комментария
Александр Коновалов

В данном подходе мне только не нравится наличие "магических" in, out и compiler. В их получении думаю логичне было бы опереться на синтаксис рефлексий. Или пойти по пути type_info, т.е. что-нибудь вроде:

for (auto f : metainfo(interface).in.functions()) {
   if (f.is_copy() || f.is_move()) {
        metainfo(interface).compiler.error("this type may not have a copy or move function" , f);
   }
} 

Таким образом, будет консистентно с typeid, sizeof и другими ключевыми словами с подобным синтаксисом.

Александр Коновалов
Alexander

Саттер на презентации говорил, что предложение ещё будет меняться. В том числе и синтаксис обьявления метаклассов. Так что вариант, который есть сейчас, далеко не финальный

Alexander
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения