泛型函数,类和“where”关键字

时间:2011-09-08 17:36:36

标签: function c++-cli where-clause generics

如何使用“where”关键字在CLI / C ++中向泛型类添加约束?我一直在寻找 - 但即使msdn只有C#文档!

所以问题的第一部分是:在定义泛型类时,在哪里放置“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;
   }

2 个答案:

答案 0 :(得分:4)

“通用,其中T:IComparable”表示T只能是IComparable的派生。 因此,当泛型类的用户尝试使用T不是IComparable的类型时,编译器会抱怨。

至于问题的第一部分,我不得不承认我是无知的。也许像Re-Sharper或CodeRush这样的工具可以提供帮助。

答案 1 :(得分:3)

  1. 在您的示例中,where介于generic <class T>ref class Stack之间。
  2. 来自the C++/CLI documentation

    where type-parameter: constraint list
    
         

    约束列表是以逗号分隔的约束规范列表。该列表可以包括由类型参数实现的接口。