6

C++0x 引入了概念,基本上可以定义类型的类型。它指定类型所需的属性

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

它们之间有语义上的区别吗?

谢谢你。

4

1 回答 1

9

要记住的一件事是 C++ 模板和 C# 泛型并不完全相同。有关这些差异的更多详细信息,请参阅此答案

从您链接到解释 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)定义的相同的属性,而不是它必须属于该类型。

于 2009-01-31T00:21:16.793 回答