C++0x 引入了概念,基本上可以定义类型的类型。它指定类型所需的属性。
C# 允许您使用“ where ”子句指定泛型的约束。
它们之间有语义上的区别吗?
谢谢你。
要记住的一件事是 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)定义的相同的属性,而不是它必须属于该类型。