首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口的dynamic_cast无法编译

接口的dynamic_cast无法编译
EN

Stack Overflow用户
提问于 2015-08-29 01:59:06
回答 1查看 180关注 0票数 1

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

代码语言:javascript
复制
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++泛型类中做同样的事情:

代码语言:javascript
复制
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();
}

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

代码语言:javascript
复制
error C2681: 'T': invalid expression type for dynamic_cast

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

EN

回答 1

Stack Overflow用户

发布于 2015-08-29 02:12:20

我看到有人在另一篇文章中提到泛型和dynamic_cast存在问题,并能够解决这个问题。

我认为问题出在IFormattable上,但问题出在“值”上。

如果我首先将值转换为Object^,它编译得很好,并且可以工作:

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32277145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档