通用函数、类和“where”关键词
如何使用“where”关键字在 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;
}
how to use "where" keyword to add constraints to a generic class in CLI/C++? I've been searching for a while - but even msdn has only C# documentation!
So the first part of the question is: where to put "where" and what can be written next to it when defining generic classes?
generic <class T> ref class Stack
{
//........
}
Second part of the question is: what does where T:IComparable
mean in the function definition below?
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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
where
位于generic
和ref class Stack
之间。来自C++/CLI 文档:
<块引用>
约束列表是一个以逗号分隔的约束规范列表。该列表可以包括要由类型参数实现的接口。
where
goes betweengeneric <class T>
andref class Stack
.From the C++/CLI documentation:
“generic where T:IComparable”意味着 T 只能是 IComparable 的派生。
因此,当泛型类的用户尝试为 T 使用不是 IComparable 的类型时,编译器会抱怨。
至于问题的第一部分,我不得不承认我很无知。也许像 Re-Sharper 或 CodeRush 这样的工具可以提供帮助。
"generic where T:IComparable" means that T can only be a derived of IComparable.
So when the user of the generic class tries to use for T a type that's not IComparable the compiler will complain.
As for the first part of the question I have to admit I am ignorant. Maybe a tool like Re-Sharper or CodeRush can help.