2017-01-13 59 views
2

目前,我正在做一些工作,C++/CLI,和我遇到一個奇怪的編譯錯誤,用下面的代碼:C++/CLI編譯錯誤與泛型委託

private ref class LinqHelper abstract sealed 
{ 
public: 
    generic<typename T, typename U> static Func<T, U>^ Cast() 
    { 
     return gcnew Func<T, U>(&LinqHelper::Cast); 
    } 

private: 
    generic<typename T, typename U> static U Cast(T val) 
    { 
     return safe_cast<U>(val); 
    } 
}; 

錯誤C3352:「演員」:指定的函數不匹配委託類型「U(T)」

更具體地,有問題的代碼行是:

return gcnew Func<T, U>(&LinqHelper::Cast); 

我發現自己無法解釋這個錯誤。我傳遞給Func委託構造函數的Cast靜態成員函數具有所需的簽名,即U Cast(T val)。

任何人都可以幫我解釋一下這個對我來說好嗎?

如果有任何幫助:我正在使用VS 2015,C++/CLI項目正在引用.NET框架v4.5.2。

謝謝

回答

2

編譯器不喜歡必須推斷Cast方法的類型參數。糟糕的錯誤消息,在C++/CLI中並不罕見。修復:

return gcnew Func<T, U>(&LinqHelper::Cast<T, U>); 
+0

非常感謝! –