2011-11-17 86 views
2

如何在C++/CLI中將非空類型轉換爲可空?如何在C++/CLI中將非空類型轉換爲可空?

我知道該怎麼做,在C#:

public Type GetNullableType(Type t) 
{ 
    return typeof(Nullable<>).MakeGenericType(t); 
} 

但我無法弄清楚,如何將其轉換爲C++/CLI。

我試過這個,但是當我編譯代碼時,我得到了內部編譯器錯誤。

Type^ nullableType = Nullable<>.GetType(); 
return nullableType->MakeGenericType(t); 

回答

2

另一個不那麼脆解決方法:

static Type^ GetNullableType(Type^ t) 
{ 
    Type^ nullable = Nullable<int>::typeid->GetGenericTypeDefinition(); 
    return nullable->MakeGenericType(t); 
} 
0

第一,而不是C#typeof(),你用用C++ typeid。所以,typeof(int)變成int::typeid

其次,在引用泛型時,似乎只是省略了尖括號。所以,typeof(List<>)變成List::typeid

問題在於您無法指定類型參數的數量。而Nullable::typeid返回非泛型靜態類Nullable的類型,這不是我們想要的。

我沒有找到一種方法直接從C++/CLI獲取類型。但是,你可以隨時使用Type.GetType()

Type^ nullableType = Type::GetType("System.Nullable`1"); 
return nullableType->MakeGenericType(t); 

(該`1 IS .NET內部使用與類型參數不同的計數來區分類型的方式。)

這將停止工作,如果Nullable<T>類型是不斷移動出於mscorlib,但我懷疑會發生。

+0

謝謝您的回答。可以寫: 'Type^nullableType = Type :: GetType(「System.Nullable'1」);' – FeatureShock

+0

你是對的。這也應該工作,我會更新我的答案。 – svick

相關問題