Generics 如何在C+中将不可空类型转换为可空类型+/CLI?

Generics 如何在C+中将不可空类型转换为可空类型+/CLI?,generics,c++-cli,nullable,Generics,C++ Cli,Nullable,如何在C++/CLI中将不可为null的类型转换为可为null的类型 我知道如何用C#做: public类型GetNullableType(类型t) { 返回typeof(可为空)。MakeGenericType(t); } 但我不知道如何将其转换为C++/CLI 我已经试过了,但是当我编译代码时,我得到了内部编译器错误 Type^ nullableType = Nullable<>.GetType(); return nullableType->MakeGenericTyp

如何在C++/CLI中将不可为null的类型转换为可为null的类型

我知道如何用C#做:

public类型GetNullableType(类型t)
{
返回typeof(可为空)。MakeGenericType(t);
}
但我不知道如何将其转换为C++/CLI

我已经试过了,但是当我编译代码时,我得到了内部编译器错误

Type^ nullableType = Nullable<>.GetType();
return nullableType->MakeGenericType(t);
Type^nullableType=Nullable.GetType();
返回nullableType->MakeGenericType(t);
<代码> > p>首先,在C++中使用<代码> Type ID >代码>代替C >代码>类型>(或代码>)。因此,
typeof(int)
变成了
int::typeid

其次,在引用泛型类型时,似乎忽略了尖括号。因此,
typeof(List)
变成了
List::typeid

问题是您不能指定类型参数的数量。并且
Nullable::typeid
返回非泛型静态类的类型
Nullable
,这不是我们想要的

我没有找到直接从C++/CLI获取类型的方法。但是您可以始终使用
Type.GetType()

`1
是.Net内部用于区分具有不同类型参数计数的类型的方式。)


如果将
Nullable
类型移出mscorlib,这将停止工作,但我怀疑这会发生。

另一个不那么脆弱的解决方法:

static Type^ GetNullableType(Type^ t)
{
    Type^ nullable = Nullable<int>::typeid->GetGenericTypeDefinition();
    return nullable->MakeGenericType(t);
}
静态类型^GetNullableType(类型^t)
{
类型^nullable=nullable::typeid->GetGenericTypeDefinition();
返回nullable->MakeGenericType(t);
}

谢谢您的回答。可以这样写吗:
Type^nullableType=Type::GetType(“System.Nullable
1”)`
Type^ nullableType = Type::GetType("System.Nullable`1");
return nullableType->MakeGenericType(t);
static Type^ GetNullableType(Type^ t)
{
    Type^ nullable = Nullable<int>::typeid->GetGenericTypeDefinition();
    return nullable->MakeGenericType(t);
}