泛型函数,类和“where”关键字
问题描述:
如何使用“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;
}
答
- 在你的例子中,
where
在generic <class T>
和ref class Stack
之间。 -
where type-parameter: constraint list
约束列表是一个逗号分隔的约束规范的列表。该列表可以包含要由类型参数实现的接口。
答
“通用其中T:IComparable的” 表示T只能是衍生IComparable的的。 因此,当泛型类的用户试图使用T不是IComparable的类型时,编译器会发出抱怨。
至于问题的第一部分,我不得不承认我无知。也许像Re-Sharper或CodeRush这样的工具可以提供帮助。