2011-09-08 44 views
2

如何使用「where」關鍵字在CLI/C++中爲泛型類添加約束?我一直在尋找一段時間 - 但即使msdn只有C#文檔!泛型函數,類和「where」關鍵字

所以問題的第一部分是:在定義泛型類時,何處放置「where」以及可以在其旁邊寫什麼?問題的

generic <class T> ref class Stack 
    { 
     //........ 
    } 

第二部分是:什麼where T:IComparable意味着下面的函數定義?

generic <typename T> where T:IComparable 
    T Function(array <T>^ x) 
    { 
     T max(x[0]); 
     for(int i = 1; i < x->Length; i++) 
     if(max-> CompareTo(x[i]) < 0) 
     max = x[i]; 
     return max; 
    } 

回答

3
  1. 在你的例子中,wheregeneric <class T>ref class Stack之間。
  2. the C++/CLI documentation

    where type-parameter: constraint list 
    

    約束列表是一個逗號分隔的約束規範的列表。該列表可以包含要由類型參數實現的接口。

4

「通用其中T:IComparable的」 表示T只能是衍生IComparable的的。 因此,當泛型類的用戶試圖使用T不是IComparable的類型時,編譯器會發出抱怨。

至於問題的第一部分,我不得不承認我無知。也許像Re-Sharper或CodeRush這樣的工具可以提供幫助。