универсальные функции, классы и ключевое слово "где" - PullRequest
2 голосов
/ 08 сентября 2011

как использовать ключевое слово «где» для добавления ограничений в общий класс в CLI / C ++?Я долго искал - но даже у msdn есть только документация на C #!

Итак, первая часть вопроса: где поставить «где» и что можно написать рядом с ним при определении универсальных классов?

   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 ]

4 голосов
/ 08 сентября 2011

«универсальный, где T: IComparable» означает, что T может быть только производным от IComparable.Поэтому, когда пользователь универсального класса пытается использовать для T тип, который не является IComparable, компилятор будет жаловаться.

Что касается первой части вопроса, я должен признать, что я не знаю.Может быть, такой инструмент, как Re-Sharper или CodeRush, может помочь.

3 голосов
/ 08 сентября 2011
  1. В вашем примере where находится между generic <class T> и ref class Stack.
  2. С документацией C ++ / CLI :

    where type-parameter: constraint list
    

    список ограничений - это список спецификаций ограничений через запятую.Список может включать интерфейсы, которые будут реализованы параметром типа.

...