2017-01-13 4 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: «Cast»: указанная функция не совпадает с типом делегата «U (T)»

Чтобы быть более конкретным, проблематично строка кода:

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

Я затрудняюсь объяснить эту ошибку. Функция статического члена Cast, которую я передаю конструктору делегата Func, имеет требуемую подпись, то есть U Cast (T val).

Может ли кто-нибудь помочь пролить свет на это для меня, пожалуйста?

Если это поможет: я работаю с VS 2015, а проект C++/CLI ссылается на .NET framework v4.5.2.

Спасибо

ответ

2

Компилятор не рад о том, чтобы вывести аргументы типа для метода Cast. Отвратительное сообщение об ошибке, не редкость в C++/CLI. Исправление:

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

Большое спасибо! –