Синтаксические правила для токена "..." в шаблонах с вариационным числом символов.
В C шаблоны с вариантами вариаций позволяют создавать шаблоны, которые принимают переменное количество аргументов. Токен "..." играет решающую роль в этом контексте, выступая либо в качестве пакета аргументов, либо в качестве распаковщика параметров.
Синтаксические правила для размещения многоточий
размещение токена "..." определяет его функцию:
Пример: шаблон с переменным числом вариантов с "..."
Рассмотрим следующий шаблон с вариантами вариантов:
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