我正在寫一個模板函數,該函數將一個函數對象(現在爲lambda)作爲參數,lambda數據類型作爲模板參數,並返回lambda返回的相同類型。就像這樣:返回類型的C++ lambda
template<typename TFunctor, typename TReturn>
TReturn MyFunc(TFunctor &Func, TReturn) //The second arg is just to keep the template spec happy
{
return Func();
}
及消費代碼是這樣的:
int n = MyFunc([](){return 17;}, int());
我不喜歡醜陋的方式指定了返回的數據類型。在編譯器生成的lambda類中是否有一些內置的typedef可以給我它的返回類型?這樣MYFUNC可以去在某種程度上是這樣的:
template<typename TFunctor>
TFunctor::return_type MyFunc(TFunctor &Func)
{ //...
我希望它返回LAMBDA回報不明確列明該類型相同的類型。
編輯:現在,我關心的所有lambda都是沒有說服力的。變量捕獲也可以做到這一點。
像這樣 - http://stackoverflow.com/a/8462724/673730? –
取決於'TFunctor'的真正含義,它可能有一個重載的'operator()',這意味着返回類型可以取決於你給它的參數。 (雖然對於非泛型lambda表達式不適用) – leemes
@leemes對於泛型lambda表達式,not * not * true。隨着將多態lambda表達式引入C++ 1y,這將會發生變化。 – Nevin