2011-09-08 76 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这样的工具可以提供帮助。