【问题标题】:What is the difference between c++0x concepts and c# constraints?c++0x 概念和 c# 约束有什么区别?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 如果它飞得像鸭子,叫得像鸭子,那它一定是鸭子? :-)
    • 除非它是鸭子的概念。似乎确实存在细微差别,C# 强制类型必须是约束,而概念只是说它必须具有这些属性但不必是那种类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2014-04-03
    • 2021-08-31
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多