c ++ 0x概念和c#约束之间有什么区别?

时间:2009-01-31 00:06:35

标签: c# c++ constraints semantics c++-concepts

C ++ 0x引入了概念,让您基本上定义了一种类型。 It specifies the properties required of a type

C#允许您使用“ where ”子句指定通用的约束

它们之间是否存在语义差异?

谢谢。

1 个答案:

答案 0 :(得分:9)

要记住的一件事是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)定义的相同属性,而不是必须属于该类型。