2017-02-17 8 views
2

В этом вопросе здесь: https://codereview.stackexchange.com/questions/14730/impossibly-fast-delegate-in-c11 Показывается реализацию делегата в C++, что этот синтаксис:Что это за синтаксис? C++

template<class R, class ...A> 
class delegate<R (A...)> // <--- Argument wrapping of some kind? 

это станет ли другой тип? Я никогда не видел этого раньше, поэтому я не могу разобрать, что он должен делать.

+2

Похоже определения функции (например, 'станд :: функция <аннулируются (целое, целое)>'): оно принимает несколько аргументов типов 'A' (здесь' A' является VARIADIC шаблон параметр) и возвращает 'R'. – yeputons

+0

Таким образом, он становится единственным типом функции ptr? – user45681

+1

@ user45681 Точно, тип - это функция, а не указатель на функцию. – songyuanyao

ответ

2

Это специальность шаблона для функции.

template <class T> 
struct func; 

template <class R, class... A> 
struct func<R (A...)> 
{ 

}; 

Специализация будет вызываться, если вы создаете экземпляр шаблона с помощью сигнатуры функции. Например:

func<void(int)> f1; 
func<int(int, int)> f2;