通用委托的C ++ / CLI编译错误

时间:2017-01-13 16:29:26

标签: compilation c++-cli .net-4.5.2

我目前正在使用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:&#39;演员&#39; :指定的函数与委托类型不匹配&#39; U(T)&#39;

更具体地说,有问题的代码行是:

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

我发现自己无法解释这个错误。我传递给Func委托构造函数的Cast静态成员函数具有所需的签名,即U Cast(T val)。

有人可以帮我解决这个问题吗?

如果有任何帮助:我正在使用VS 2015,而C ++ / CLI项目正在引用.NET framework v4.5.2。

谢谢

1 个答案:

答案 0 :(得分:2)

编译器不满意必须推断Cast方法的类型参数。糟糕的错误消息,在C ++ / CLI中并不罕见。修正:

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