«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как использовать токен \"...\" для упаковки и распаковки аргументов в вариационных шаблонах C++?

Как использовать токен \"...\" для упаковки и распаковки аргументов в вариационных шаблонах C++?

Опубликовано 16 ноября 2024 г.
Просматривать:909

How do you use the \

Синтаксические правила для токена "..." в шаблонах с вариационным числом символов.

В C шаблоны с вариантами вариаций позволяют создавать шаблоны, которые принимают переменное количество аргументов. Токен "..." играет решающую роль в этом контексте, выступая либо в качестве пакета аргументов, либо в качестве распаковщика параметров.

Синтаксические правила для размещения многоточий

размещение токена "..." определяет его функцию:

  • Pack: Когда он появляется слева от имени, "..." указывает на пакет аргументов : ...thing // Pack
  • Unpack: Когда он появляется в правой части выражения, "..." распаковывает пакет параметров шаблона:thing... // unpack

Пример: шаблон с переменным числом вариантов с "..."

Рассмотрим следующий шаблон с вариантами вариантов:

template
unique_ptr make_unique( Args&&... args )
{
    return unique_ptr(new T(std::forward(args)...));
}

В этом примере "..." служит пакетом аргументов, а "..." в реализации функции распаковывает аргументы в переменную args.

Причина разного размещения многоточия

Разница в размещении многоточия между списком аргументов шаблона и списком параметров связана с различием между упаковкой аргументов и распаковкой параметров. В списке аргументов шаблона «...» означает, что параметры должны быть упакованы в один пакет параметров, а в списке параметров «...» означает, что аргументы должны быть распакованы в отдельные параметры.

Шаблоны распаковки

Когда «...» появляется в правой части выражения в качестве распаковщика, оно следует определенному шаблону:

  • выражение слева от "..." повторяется, разделенное запятыми.
  • Каждое повторение представляет собой выражение, которое использует один элемент из пакета параметров шаблона.

Дополнительно Использование: Инициализация массивов.

Многоточие также можно использовать для инициализации массивов:

struct data_info
{
     boost::any  data;
     std::size_t type_size;
};

std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}

Это инициализирует вектор v значениями, где каждый элемент представляет собой структуру, содержащую пару аргументов и sizeof(T).

В заключение токен "..." в контексте шаблонов с переменным числом вариантов служит одновременно пакетом аргументов и распаковщиком параметров, следуя определенным синтаксическим правилам для шаблонов размещения и распаковки. Его гибкое использование позволяет создавать мощные конструкции шаблонов и настраивать их.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3