2017-02-17 105 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;