Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Что означает двойное многоточие при определении списка аргументов в шаблонной функции

Объясните пожалуйста, что означает данная конструкция:
template struct is_function<_Res(_ArgTypes......)> : public true_type { };
А именно, в списке параметров ф-ии с 6-ю точками _ArgTypes......
Поясню:
Есть шаблон, перегруженный специализациями, для определения того что аргумент является функцией:
template struct is_function : public false_type { };
template struct is_function<_Res(_ArgTypes...)> //ф-я передается // по значению (как функц. объект) или по указателю // если _Res классическая ф-я : public true_type { };
// а здесь передается по ссылке, функц. объект template struct is_function<_Res(_ArgTypes...) &> : public true_type { };
Понятно что ф-ии могут иметь произвольное кол-во аргументов (от нуля до какого-то числа, возможно ограниченного только размером стека, это не важно) - это всё понятно, а вот синтаксис с ...... не понятен, и к сожалению в литературе и гугле не смог найти ответа на свой вопрос.
Спасибо.


Ответ

Три точки - variadic templates, еще три точки - переменное количество аргументов.
(примерно перевожу отсюда) Т.е. на этапе компиляции шаблон получает переменное количество шаблонных аргументов, после этого, вдобавок, инстанцированные методы/функции получают возможность принимать произвольное количество аргументов в стиле языка C.
...... можно записать как ..., ... - что более читабельно, кстати.
на английском многоточие называется ellipsis ...
google://c++ ellipsis template recursion
вкратце - используется для передачи произвольного количества аргументов шаблону на этапе компиляции.
почитать здесь: http://eli.thegreenplace.net/2014/variadic-templates-in-c/

Комментариев нет:

Отправить комментарий