我有一些像这样的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运算符
答案 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();
}