2012-06-14 73 views
1

我已經爲小時的搜索答案,但我沒有發現任何東西...... 所以,這裏是我的問題:獲取拉姆達參數輸入到模板參數包

template<typename Signature> struct wrapper; // (1) 

template<typename Ret, typename... Args> 
struct wrapper<Ret(Args...)> // (2) 
{ 
    function static get(Ret(*fnc)(Args...), Args... args) 
    { 
    return function(/*some more stuff here that work*/); 
    } 
} 

基本上,這代碼提取返回類型和函數的參數並返回一個通用函數容器。此代碼使用簡單的功能。 但後來我試圖使用lambdas。 如果沒有這個包裝(通過手寫完整的原型)代碼工作,我可以調用lambda。 但是,當我用這個包裝與lambda函數,我得到一些

'./some-file.cpp:xy:z: error: incomplete type 'wrapper >' used in nested name specifier'

是由兩個點(1)和(2)因爲lambda不能放入一個函數指針錯誤? 我正在尋找一種方法來獲取lambda的參數類型到一個模板參數包(返回類型不重要,我所有的lambda不返回值(所以它是無效的)) 在此先感謝您的幫助:)

+1

您可以發佈完整的錯誤消息? –

+0

這是完整的錯誤信息;) – neam

+0

你使用什麼編譯器的版本? – ildjarn

回答

-1

看來你只有聲明wrapper結構,你其實定義它。

嘗試正確定義結構:

template<typename Signature> struct wrapper {}; 
+0

有了這個行,它只是移動錯誤。我得到一個./x.cpp:x:x:錯誤:'get'不是'wrapper >'(這是唯一的一行)的成員。看起來我的專業化與lambda函數不匹配。 – neam