#cpp #cpp11 #шаблоны_с++ #function_overloading
Объясните пожалуйста, что означает данная конструкция: templatestruct 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 { }; Понятно что ф-ии могут иметь произвольное кол-во аргументов (от нуля до какого-то числа, возможно ограниченного только размером стека, это не важно) - это всё понятно, а вот синтаксис с ...... не понятен, и к сожалению в литературе и гугле не смог найти ответа на свой вопрос. Спасибо.
Ответы
Ответ 1
Три точки - variadic templates, еще три точки - переменное количество аргументов. (примерно перевожу отсюда) Т.е. на этапе компиляции шаблон получает переменное количество шаблонных аргументов, после этого, вдобавок, инстанцированные методы/функции получают возможность принимать произвольное количество аргументов в стиле языка C. ...... можно записать как ..., ... - что более читабельно, кстати. на английском многоточие называется ellipsis ... google://c++ ellipsis template recursion вкратце - используется для передачи произвольного количества аргументов шаблону на этапе компиляции. почитать здесь: http://eli.thegreenplace.net/2014/variadic-templates-in-c/
Комментариев нет:
Отправить комментарий