2017-02-17 112 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

看起来像一个函数定义(如'的std ::函数<空隙(INT,INT)>'):它需要的类型的多个参数'A'(这里'A'是一个可变参数模板参数)并返回'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;