Информация об изменениях

Сообщение Анализ списка параметров лямбды от 06.02.2025 10:58

Изменено 06.02.2025 10:59 rg45

Анализ списка параметров лямбды
Всем привет!

Есть задачка "со звёздочкой". Мне пока не удалось её раскусить, возможно, кому-то из форумчан это удастся.

Итак, есть семейство нешаблонных классов с единственным функциональным оператором (в типовом варианте — это всё классы лямб). Функциональные операторы всех этих классов удовлетворяют следующим соглашениям:

  • Операторы могут быть как шаблонными, так и нешаблонными;
  • Шаблонные операторы могут содержать вариадик пак в конце;
  • Порядок параметров оператора таков:
    1. Сначала идут все параметры, независящие от параметров шаблона, если они есть,
    2. Затем идут параметры, зависящие от "фиксированных" параметров шаблона — т.е. от параметров шаблона, не входящих в вариадик пак. Опять же, если таковые параметры есть.
    3. В конце идет вариадик пак, опять же, если он есть.

Требуется:
  • Вытащить из сигнатуры оператора список типов формальных параметров, независящих от параметров шаблона. В случае отсутсвия таких параметров в операторе, список должен быть пустым.
  • Определить число параметров, зависящих от "фиксированных" параметров шаблона (т.е. не входящих в вариадик пак).
  • Определить наличие вариадик пака.

Например, для класса лямбды с такой сигнатурой:

[](int, std::vector<int>&&, const std::string&, auto&&, auto, const auto&, auto&&...){/* . . . */}


результат должен быть таким: список типов: (int, std::vector<int>&&, const std::string&), число "фиксированных" шаблонных параметров: 3, использование вариадик пака: true.
Анализ списка параметров лямбды
Всем привет!

Есть задачка "со звёздочкой". Мне пока не удалось её раскусить, возможно, кому-то из форумчан это удастся.

Итак, есть семейство нешаблонных классов с единственным функциональным оператором (в типовом варианте — это всё классы лямбд). Функциональные операторы всех этих классов удовлетворяют следующим соглашениям:

  • Операторы могут быть как шаблонными, так и нешаблонными;
  • Шаблонные операторы могут содержать вариадик пак в конце;
  • Порядок параметров оператора таков:
    1. Сначала идут все параметры, независящие от параметров шаблона, если они есть,
    2. Затем идут параметры, зависящие от "фиксированных" параметров шаблона — т.е. от параметров шаблона, не входящих в вариадик пак. Опять же, если таковые параметры есть.
    3. В конце идет вариадик пак, опять же, если он есть.

Требуется:
  • Вытащить из сигнатуры оператора список типов формальных параметров, независящих от параметров шаблона. В случае отсутсвия таких параметров в операторе, список должен быть пустым.
  • Определить число параметров, зависящих от "фиксированных" параметров шаблона (т.е. не входящих в вариадик пак).
  • Определить наличие вариадик пака.

Например, для класса лямбды с такой сигнатурой:

[](int, std::vector<int>&&, const std::string&, auto&&, auto, const auto&, auto&&...){/* . . . */}


результат должен быть таким: список типов: (int, std::vector<int>&&, const std::string&), число "фиксированных" шаблонных параметров: 3, использование вариадик пака: true.