Страницы

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

четверг, 5 декабря 2019 г.

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

#cpp #cpp11 #шаблоны_с++ #function_overloading


Объясните пожалуйста, что означает данная конструкция:

  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 { };


Понятно что ф-ии могут иметь произвольное кол-во аргументов (от нуля до какого-то
числа, возможно ограниченного только размером стека, это не важно) - это всё понятно,
а вот синтаксис с ...... не понятен, и к сожалению в литературе и гугле не смог найти
ответа на свой вопрос.

Спасибо.
    


Ответы

Ответ 1



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

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

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