dynamic_cast to interface不会编译

时间:2015-08-28 17:59:06

标签: c++-cli

我有一些像这样的C#代码:

string GetString(int n, CultureInfo cultureInfo)
{
    T value = data[n];
    IFormattable formattable = value as IFormattable;
    if (formattable != null)
        return formattable.ToString(null, cultureInfo)
    return value.ToString();
}

我试图在C ++泛型类中做同样的事情:

String^ GetString(int n, CultureInfo^ cultureInfo)
{
    T value = data[n];
    IFormattable^ formattable = dynamic_cast<IFormattable^>(value);
    if (formattable != nullptr)
        return formattable->ToString(nullptr, cultureInfo);
    return value->ToString();
}

当我尝试编译它时,我得到:

error C2681: 'T': invalid expression type for dynamic_cast

我不确定为什么它不会编译,因为我的理解是dynamic_cast类似于C#中的as运算符

1 个答案:

答案 0 :(得分:0)

我看到有人提到在另一篇文章中存在泛型和dynamic_cast的问题,并且能够弄明白。

我认为问题出在IFormattable上,但问题在于'价值'。

如果我将值转换为第一个对象^

,它编译正常并且有效
String^ GetString(int n, CultureInfo^ cultureInfo)
{
    T value = data[n];
    IFormattable^ formattable = dynamic_cast<IFormattable^>((Object^)value);
    if (formattable != nullptr)
        return formattable->ToString(nullptr, cultureInfo);
    return value->ToString();
}