【发布时间】:2010-10-04 14:36:54
【问题描述】:
C++0x 引入了concepts,基本上可以定义一个类型的类型。 It specifies the properties required of a type。
C# 允许您使用“where”子句指定泛型的约束。
它们之间有语义上的区别吗?
谢谢。
【问题讨论】:
标签: c# c++ constraints semantics c++-concepts
C++0x 引入了concepts,基本上可以定义一个类型的类型。 It specifies the properties required of a type。
C# 允许您使用“where”子句指定泛型的约束。
它们之间有语义上的区别吗?
谢谢。
【问题讨论】:
标签: c# c++ constraints semantics c++-concepts
要记住的一点是,C++ 模板和 C# 泛型并不完全相同。有关这些差异的更多详细信息,请参阅此answer。
从您链接到解释 C++0x 概念的页面中,听起来想法是在 C++ 中您希望能够指定模板类型实现某些属性。在 C# 中,约束比这更进一步,并强制泛型类型“属于”该约束。例如下面的 C# 代码:
public GenericList<T> where T : IDisposable
表示任何用于代替 T 的类型必须实现 IDisposable 接口。同样,以下代码:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
表示任何用于代替 T 的类型都必须是 ABC 类型或派生自 ABC。
C++0x 的概念思想只是说用于代替 T 的类型必须具有与 ABC(或 IDisposable)定义的相同的属性,而不是必须属于该类型。
【讨论】: